У меня проблема с получением желаемого результата с помощью 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
.
Обновление-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
? Или есть лучший способ сделать это?
Спасибо.