транспонировать строки в столбцы в SQL
У меня есть проблема в получении желаемого результата с запросом SQL.
Мои данные sql следующие:
TOTAL Charge PAYMNET A B C D E MonthYear
------- ----------- ----------- --------- -------- ---------- ------- ------- ----------
661 157832.24 82967.80 700.00 10.70 58329.33 0.00 0.00 Oct-2013
612 95030.52 17824.28 850.00 66.10 53971.41 0.00 0.00 Nov-2013
584 90256.35 16732.91 700.00 66.10 52219.87 0.00 0.00 Dec-2013
511 72217.32 12336.12 285.00 53.17 42951.12 0.00 0.00 Jan-2014
Мне нужен вывод следующим образом,
Data Jan-2013 Feb-2013 Mar-2013
TOTALCOUNT 761 647 671
Charge 126888 119995 151737.5
Payment 25705.4 26235.47 28704.41
A 1089.08 1020 745
B 2100.4 1947.25 1868.22
C 94246.55 84202.15 115673.7
D 0 0 0
E 0 0 0
Я видел примерыpivot
а такжеunpivot
, вpivot
Я не получаю заголовки столбцов в виде данных строк, а вunpivot
Я не нашел пример, где я могу транспонировать несколько столбцов. У меня есть еще один вариант, чтобы получить этот результат в коде. Но я хочу знать, возможно ли получить такой результат в SQL?
редактировать
Результат даст только за 3 или 4 месяца, не более того.
Обновить Первый пример данных - это фактические данные, которые я получу в результате нескольких объединений и группировки по нескольким таблицам, которые я буду хранить во временной таблице. Я попытался получить требуемый результат, изменив запрос, что невозможно из-за структуры таблицы. Мне удалось получить результат, как в первом примере данных, но это не то, что клиент хочет видеть !!! Поэтому мне нужно обработать данные временной таблицы, которые будут содержать от 3 до 4 строк. Запрос для получения первого результатаselect * from temp
, Обработка должна быть сделана наtemp
таблица результатов.
Update-2
Я пробовал следующий запрос
declare @cols varchar(max)
select @cols = STUFF((select ', ' + MonthYear
from #tmp for xml path('')),1,1,'')
declare @query varchar(max)
set @query =
'select ''TOTAL'' as Data,' +@cols+' from
(select MonthYear,TOTALCLAIMS from #tmp)st
pivot
(
MAX(TOTAL) for MonthYear in (' + @cols + ')
)pt;'
Который дал мне первый ряд правильно !!! Но я пытался использоватьunion
как
set @query =
'select ''TOTAL'' as Data,' +@cols+' from
(select MonthYear,TOTALCLAIMS from #tmp)st
pivot
(
MAX(TOTAL) for MonthYear in (' + @cols + ')
)pt;
union
select ''CHARGES'' as Data,' +@cols+' from
(select MonthYear,TOTALCLAIMS from #tmp)st
pivot
(
MAX(CHARGES) for MonthYear in (' + @cols + ')
)pt;'
Который дает ошибку какincorrect syntax near union
, Любой знает, как объединитьсяpivot
Результаты? Или есть ли лучший способ сделать это?
Благодарю вас.