Member 12245539 Ответов: 2

Как сделать сводную таблицу в sqlserver


У меня есть одна таблица в sqlserver с именем Fee_Assign_to_Students. Эта таблица представляет собой значение типа

cls_SecId | S_Adm_No | FHeadId | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Jan | Feb | Mar
     1    |   1001   |    4    | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100
     1    |   100    |    5    | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100
     1    |   1001   |    5    | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100



Теперь я хочу, чтобы repsent выше упомянутой таблицы, как

cls_SecId | S_Adm_No| Installment |  Amount                         |  Payable_Date
     1    |   1001  | Quarter-1   | sum of 3 columns (Apr+May+Jun)  |  PayableDate will be mannual as 15.04.2015
     1    |   1001  | Quarter-2   | sum of 3 columns (Jul+Aug+Sep)  |  PayableDate will be mannual as 15.07.2015
     1    |   1001  | Quarter-3   | sum of 3 columns (Oct+Nov+Dec)  |  PayableDate will be mannual as 15.10.2015
     1    |   1001  | Quarter-4   | sum of 3 columns (Jan+Feb+mar)  |  PayableDate will be mannual as 15.01.2016


Что я уже пробовал:

...........................................................

2 Ответов

Рейтинг:
2

Maciej Los

Дэниел, ОП не нужно использовать PIVOT. Он должен использовать "отмена сведения". Итак, ваш ответ неверен. Мой голос-1.

Member 12245539

Сэр
Через объявление он работает нормально.

Но если я получаю значение из таблицы Fee_Assign_to_Students, то значения приходят такие



1 2016/001 Q1 600 15.04.2015
1 2016/001 1 квартал 1500 15.04.2015
1 2016/001 1кв 15000 15.04.2015
1 2016/001 Q2 0 15.07.2015
1 2016/001 Q3 0 15.10.2015
1 2016/001 Q4 0 15.01.2015
1 2016/018 Q1 600 15.04.2015
1 2016/018 1 квартал 1500 15.04.2015
1 2016/018 1кв 15000 15.04.2015
1 2016/018 Q2 0 15.07.2015
1 2016/018 Q3 0 15.10.2015
1 2016/018 Q4 0 15.01.2015

Рейтинг:
19

Maciej Los

Попробовать это:

DECLARE @Fee_Assign_to_Students TABLE(cls_SecId INT, S_Adm_No INT, FHeadId INT, Apr INT, May INT, Jun INT, Jul INT, Aug INT, Sep INT, Oct INT, Nov INT, Dec INT, Jan INT, Feb INT, Mar INT)

INSERT INTO @Fee_Assign_to_Students (cls_SecId, S_Adm_No, FHeadId, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec, Jan, Feb, Mar)
VALUES(1, 1001, 4, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100),
(1, 1001, 5, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100),
(1, 1001, 5, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100)

SELECT cls_SecId, S_Adm_No, Installment, SUM(Amount) AS AMount, CASE
		WHEN  Installment = 'Q1' THEN '15.04.2015'
		WHEN  Installment = 'Q2' THEN '15.07.2015'
		WHEN  Installment = 'Q3' THEN '15.10.2015'
		WHEN  Installment = 'Q4' THEN '15.01.2015' END AS Payable_Date
FROM (
	SELECT cls_SecId, S_Adm_No, Apr + May + Jun AS Q1, Jul + Aug + Sep AS Q2, Oct + Nov + Dec AS Q3, Jan + Feb + Mar AS Q4
	FROM @Fee_Assign_to_Students
	) AS Pvt
UNPIVOT (Amount FOR Installment IN (Q1, Q2, Q3, Q4)) AS unPvt
GROUP BY cls_SecId, S_Adm_No, Installment

Результат:
cls_SecId	S_Adm_No	Installment	Amount	Payable_Date
1			1001		Q1			900		15.04.2015
1			1001		Q2			900		15.07.2015
1			1001		Q3			900		15.10.2015
1			1001		Q4			900		15.01.2015


Для получения более подробной информации, пожалуйста, смотрите:
Использование PIVOT и UNPIVOT[^]
CASE (Transact-SQL)[^]


Member 12245539

Босс!
Сумма будет
cls_SecId S_Adm_No сумма рассрочки Payable_Date
1 1001 1 квартал 900 15.04.2015
1 1001 Q2 900 15.07.2015
1 1001 Q3 900 15.10.2015
1 кв. 4 кв. 1001 900 15.01.2015

вместо
cls_SecId S_Adm_No сумма рассрочки Payable_Date
1 1001 Q1 300 15.04.2015
1 1001 Q2 300 15.07.2015
1 1001 Q3 300 15.10.2015
1 1001 Q4 300 15.01.2015

Я вам внимательнее вглядываюсь в ваш ответ, тогда есть три ряда. Так

3 строки * 100=300 * 3 столбца (Апрель + Май + Июнь)= 900

Ряд будет увеличен в соответствии с требованиями...

Пожалуйста, посмотрите его и проясните .....

Maciej Los

Вы совершенно правы!
Проверьте обновленное решение ;)

Member 12245539

Спасибо!
это работает ...

Maciej Los

Всегда пожалуйста.
Овации,
Мацей