Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 PIVOT не удается HELLP  [new]
Samat Samat
Member

Откуда:
Сообщений: 4
С_Sale_Items __Data ___ N_Amount
ГВС_________201812___0,00
ХВС_________201812___100,00
Э/Э_________201812___30,00
ГВС_________201812___170,00
ХВС_________201812___105,0
Э/Э_________201812___45,00
ГВС_________201901___165,00
ХВС_________201901___110,00
Э/Э_________201901___55,00
ГВС_________201901___185,00
ХВС_________201901___115,00
Э/Э__________201901___60,00
ГВС__________201902___165,00
ХВС_________201902___110,00
Э/Э__________201902___55,00
ГВС__________201902___185,00
ХВС_________201902___115,00
Э/Э__________201902___60,00

Нужно вывести общие суммы начислений за каждый месяц по каждой услуге за все время, так чтобы услуги были в столбцах, месяца в строках.

SELECT C_Sale_Items,STR(100*YEAR(D_Date)+MONTH(D_Date),6),N_Amount
FROM FD_Bills
PIVOT (SUM(N_Amout)
FOR C_Sale_Items IN ([ГВС], [ХВС], [Э/Э])) AS PV;
6 окт 19, 16:30    [21987653]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
Remind
Member

Откуда: UK
Сообщений: 432
D_Date - date колонка?

SELECT 100*YEAR(D_Date)+MONTH(D_Date) as [Data], SUM([ГВС]) as [ГВС], SUM([ХВС]) as [ХВС], SUM([Э/Э]) as [Э/Э]
FROM @t t
PIVOT (
SUM(N_Amount)
FOR C_Sale_Items IN ([ГВС], [ХВС], [Э/Э])
) AS PV
GROUP BY 100*YEAR(D_Date)+MONTH(D_Date);
7 окт 19, 13:13    [21988152]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
Samat Samat
Member

Откуда:
Сообщений: 4
Remind,

Чудно. Спасибо. У самого дым из ушей уже шел. Я еще в дальнейшем обращусь, будешь наставником?
7 окт 19, 14:11    [21988263]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
Samat Samat
Member

Откуда:
Сообщений: 4
Remind,

Ты не мог бы указать ошибку? Ругается : Сообщение 102, уровень 15, состояние 1, строка 5
Неправильный синтаксис около конструкции "(".

SELECT C_Sale_Items, SUM(201812) AS [201812], SUM(201901) AS [201901], SUM(201902) AS [201902]
FROM FD_Bills
PIVOT (
SUM(N_Amount)
FOR (100*YEAR(D_Date)+MONTH(D_Date))   IN ([201812], [201901], [201902])
) AS PV
GROUP BY C_Sale_Items



Модератор: Пользуйтесь тегом SRC
7 окт 19, 14:48    [21988335]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
nullin
Member

Откуда: pullin
Сообщений: 47
Samat Samat,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

PIVOT  
(  
    <aggregation function>(<column being aggregated>)  
FOR   
[<column that contains the values that will become column headers>]   
    IN ( [first pivoted column], [second pivoted column],  
    ... [last pivoted column])  
) AS <alias for the pivot table> 

после FOR должно находится имя столбца, т.е. в данном случае нужно во вложенном запросе дать той конструкции, которая есть после FOR - алиас, а потом уже использовать его

и еще:
Samat Samat
SELECT C_Sale_Items, SUM([201812]) AS [201812] 
sum(2) равно 2 при любом раскладе, кроме того случая, когда используется group by из пустой таблицы.
7 окт 19, 15:22    [21988387]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
Samat Samat
Member

Откуда:
Сообщений: 4
nullin, "Недопустимое имя столбца "dot"" ?

SELECT C_Sale_Items, SUM([201812]) AS [201812], SUM([201901]) AS [201901], SUM([201902]) AS [201902]
FROM ( SELECT 100*YEAR(D_Date)+MONTH(D_Date) as [dot], C_Sale_Items, N_Amount FROM FD_Bills ) as s 
PIVOT (
SUM(N_Amount)
FOR 
     dot   IN ([201812], [201901], [201902])
) AS PV
WHERE dot = (SELECT 100*YEAR(D_Date)+MONTH(D_Date) FROM FD_Bills)
GROUP BY C_Sale_Items;
7 окт 19, 16:55    [21988529]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не удается HELLP  [new]
nullin
Member

Откуда: pullin
Сообщений: 47
Samat Samat, [dot] уже отпивочен. Лучше напишите скрипты создания таблиц, и тот результат на этих данных, который желаем и алгоритм - быстрее помогут.
7 окт 19, 17:34    [21988607]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить