pigzi |
---|
Имеется таблица (я ее не создавал)
Счет | значение1 | значение2 | значение3 | значение4 | значение5 | счет_значение5 | Null | Null | Null | Null | Null | счет_значение1_значение5 | Null | Null | Null | Null | Null | счет_значение2_значение5 | Null | Null | Null | Null | Null | счет_значение3_значение5 | Null | Null | Null | Null | Null | счет_значение4_значение5 | Null | Null | Null | Null | Null | счет_значение2_значение1_значение5 | Null | Null | Null | Null | Null |
|
и т.д.
Требуется получить
Счет | значение1 | значение2 | значение3 | значение4 | значение5 | счет | Null | Null | Null | Null | значение5 | счет | значение1 | Null | Null | Null | значение5 | счет | Null | значение2 | Null | Null | значение5 | счет | Null | Null | значение3 | Null | значение5 | счет | Null | Null | Null | значение4 | значение5 | счет | значение1 | значение2 | Null | Null | значение5 |
|
|
про "эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность" - "недошло" или "непоместилось" ?
declare @t table (id int, Счет varchar(100))
insert into @t
select 1, 'счет_значение5' union all
select 2, 'счет_значение1_значение5' union all
select 3, 'счет_значение2_значение5' union all
select 4, 'счет_значение3_значение5' union all
select 5, 'счет_значение4_значение5' union all
select 6, 'счет_значение2_значение1_значение5'
--select * from @t
;with cte as
(select id, Счет, cast('<a>'+replace (Счет, '_', '</a><a>')+'</a>' as xml) as xz from @t)
select id, Счет, [0], [1], [2], [3], [4], [5]
from
(select t1.id, t1.Счет, t2.val, case when isnumeric(right(t2.val, 1))=1 then right(t2.val, 1) else 0 end as num
from cte t1
cross apply
(select t.c.value('text()[1]', 'varchar(10)') as [val]
from t1.xz.nodes('/a') as t(c))as t2) a
pivot (max(val) for num in ([0], [1], [2], [3], [4], [5])) pvt
order by 1
(6 row(s) affected)
id Счет 0 1 2 3 4 5
----------- ---------------------------------------- ---------- ---------- ---------- ---------- ---------- ----------
1 счет_значение5 счет NULL NULL NULL NULL значение5
2 счет_значение1_значение5 счет значение1 NULL NULL NULL значение5
3 счет_значение2_значение5 счет NULL значение2 NULL NULL значение5
4 счет_значение3_значение5 счет NULL NULL значение3 NULL значение5
5 счет_значение4_значение5 счет NULL NULL NULL значение4 значение5
6 счет_значение2_значение1_значение5 счет значение1 значение2 NULL NULL значение5
(6 row(s) affected)