Я сделал несколько предположений на основе ваших имен столбцов, но похоже, что вы хотите использовать что-то похожее на это. Это относится как к UNPIVOT
, так и к PIVOT
, чтобы получить значения в запрошенных вами столбцах:
select *
from
(
select id,
language,
col + cast(QUESTION as varchar(10))
+cast(subquestion as varchar(10))
+cast(SubSubQuestion as varchar(10)) col,
value
from
(
select id, language,
cast(TotalCount as varchar(10)) TotalCount,
totalPercent,
question, subquestion, SubSubQuestion
from yourtable
) usrc
unpivot
(
value
for col in (totalcount, totalpercent)
) un
) srcpiv
pivot
(
max(value)
for col in ([TotalCount901], [totalPercent901],
[TotalCount902], [totalPercent902],
[TotalCount903], [totalPercent903],
[TotalCount909], [totalPercent909])
) p
См. SQL Fiddle с демонстрацией.
Примечание: при выполнении UNPIVOT
столбцы должны быть одного типа данных. Если это не так, вам нужно будет преобразовать/преобразовать, чтобы получить одинаковые типы данных.
Если у вас есть неизвестное количество значений для преобразования, вы можете использовать динамический sql:
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot
= STUFF((SELECT ','
+ QUOTENAME(c.name +
cast(QUESTION as varchar(10))
+cast(subquestion as varchar(10))
+cast(SubSubQuestion as varchar(10)))
from yourtable t
cross apply sys.columns as C
where C.object_id = object_id('yourtable') and
C.name in ('TotalCount', 'TotalPercent')
group by c.name, t.question, t.subquestion, t.subsubquestion
order by t.SubSubQuestion
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'select *
from
(
select id,
language,
col + cast(QUESTION as varchar(10))
+cast(subquestion as varchar(10))
+cast(SubSubQuestion as varchar(10)) col,
value
from
(
select id, language,
cast(TotalCount as varchar(10)) TotalCount,
totalPercent,
question, subquestion, SubSubQuestion
from yourtable
) usrc
unpivot
(
value
for col in (totalcount, totalpercent)
) un
) srcpiv
pivot
(
max(value)
for col in (' + @colsPivot + ')
) p '
execute(@query)
См. SQL Fiddle с демонстрацией.
person
Taryn
schedule
01.11.2012
Total*901
,Total*902
иTotal*903
. А как насчетTotal*909
? - person mellamokb   schedule 02.11.2012