Hi All.
I need help to convert set of columns into set of rows. What I mean. For instance table has:
1 152 ncvnvc gfg
2 256 ldkfjgdflkjg rtyrt
3 26 unkh 546s
4 5198 lkjsdlkj sdf45
as the result I would like to get:
1 152
1 ncvnvc
1 gfg
2 256
2 ldkfjgdflkjg
2 rtyrt
3 26
3 unkh
3 546s
4 5198
4 lkjsdlkj
4 sdf45
How to get that result if it possible. I will appreciate for explanation.
Very easy to do (and to do efficiently). I'll post code if you post directly usable sample data: CREATE TABLE and INSERT statements for the data shown.
drop table #data
go
create table #data
(
id int ,
string varchar(100)
)
go
insert into #data select 1,'152 ncvnvc gfg'
insert into #data select 2, '256 ldkfjgdflkjg rtyrt'
insert into #data select 3, '26 unkh 546s'
insert into #data select 4, '5198 lkjsdlkj sdf45'
go
select * from #data
go
SQL ....
;WITH cte
AS (SELECT id,
Cast(LEFT(string, Charindex(' ', string + ' ') - 1) AS VARCHAR)
AS ok
,
Stuff(string, 1, Charindex(' ', string + ' '), '')
AS ok123
FROM #data
UNION ALL
SELECT id,
Cast(LEFT(ok123, Charindex(' ', ok123 + ' ') - 1) AS VARCHAR),
Stuff(ok123, 1, Charindex(' ', ok123 + ' '), '')
FROM cte
WHERE ok123 > '')
SELECT id,
ok
FROM cte
ORDER BY id
go
drop table #data
go
create table #data
(
id int ,
string1 varchar(100),
string2 varchar(100),
string3 varchar(100)
)
go
insert into #data select 1,'152','ncvnvc','gfg'
insert into #data select 2, '256','ldkfjgdflkjg','rtyrt'
insert into #data select 3, '26','unkh','546s'
insert into #data select 4, '5198','lkjsdlkj','sdf45'
go
select * from #data
go
SQL ... for data different format
select id,string1 from #data
union all
select id,string2 from #data
union all
select id,string3 from #data