Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pivot multiple aggregate / 4 сообщений из 4, страница 1 из 1
13.11.2018, 15:01
    #39732468
hewlett
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pivot multiple aggregate
вопрос почему неправильно суммируются дубли в Pivot (поля DecPcs и DecAmt)? Так не получится или что-то не то с синтаксисом?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
DECLARE @PivotExample AS  TABLE
(
    MONTH VARCHAR(15),
    YEAR VARCHAR(4),
    PIECES int,
    AMOUNT int
)
INSERT INTO @PivotExample VALUES
        ('Jan','2013',5,500),
        ('Jan','2014',15,2500),
        ('Feb','2013',2,300),
        ('Dec','2013',10,400),
        ('Dec','2013',10,400),
        ('Dec','2014',40,4000)


SELECT YEAR,
             MONTH+'Pcs' AS MonthPcs,
             MONTH+'Amt' AS MonthAmt,
             PIECES,
             AMOUNT
      FROM @PivotExample;

SELECT  YEAR AS Year
		,JanPcs		
		,JanAmt				
		,DecPcs
		,DecAmt
FROM (SELECT YEAR,
             MONTH+'Pcs' AS MonthPcs,
             MONTH+'Amt' AS MonthAmt,
             PIECES,
             AMOUNT
      FROM @PivotExample
	  ) AS T
      PIVOT
     (sum(PIECES) FOR MonthPcs IN
     (JanPcs,FebPcs,MarPcs,AprilPcs,MayPcs,JunePcs,JulyPcs,AugPcs,SepPcs,OctPcs,NovPcs,DecPcs)) AS P1
      PIVOT
     (sum(AMOUNT) FOR MonthAmt IN
     (JanAmt,FebAmt,MarAmt,AprilAmt,MayAmt,JuneAmt,JulyAmt,AugAmt,SepAmt,OctAmt,NovAmt,DecAmt)) AS P2;



исходные данные (добавлено поле месяца для каждого пивота)

YEARMonthPcs MonthAmt PIECES AMOUNT2013 JanPcs JanAmt 5 5002014 JanPcs JanAmt 15 25002013 FebPcs FebAmt 2 3002013 DecPcs DecAmt 10 4002013 DecPcs DecAmt 10 4002014 DecPcs DecAmt 40 4000

результат запроса

Year JanPcs JanAmt DecPcs DecAmt2013 NULL NULL 20 4002013 NULL NULL NULL NULL2013 5 500 NULL NULL2014 NULL NULL 40 40002014 15 2500 NULL NULL

вопрос почему за 2013 год для DecPcs просуммировалось (10=10=20), а для DecAmt нет (400+400=800, а пишет 400).

если поменять значения для DecPcs таким образом

YEARMonthPcs MonthAmt PIECES AMOUNT2013 JanPcs JanAmt 5 5002014 JanPcs JanAmt 15 25002013 FebPcs FebAmt 2 3002013 DecPcs DecAmt 10 4002013 DecPcs DecAmt 10 5002014 DecPcs DecAmt 40 4000

то теперь DecAmt суммируется (400+500=900), а DecPcs нет (10+10=20, а пишет 10)

Year JanPcs JanAmt DecPcs DecAmt2013 NULL NULL 10 9002013 NULL NULL NULL NULL2013 5 500 NULL NULL2014 NULL NULL 40 40002014 15 2500 NULL NULL

Если отдельные пивоты то все правильно суммирует.
...
Рейтинг: 0 / 0
13.11.2018, 15:33
    #39732494
Cristiano_Rivaldo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pivot multiple aggregate
hewlett,

В плане запроса в Stream Aggregate поле amount входит в условие группировки group by. А для последующего PIVOT - а - нет.
...
Рейтинг: 0 / 0
13.11.2018, 15:51
    #39732521
Rigersong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pivot multiple aggregate
DECLARE @PivotExample AS TABLE
(
MONTH VARCHAR(15),
YEAR VARCHAR(4),
PIECES int,
AMOUNT int
)

INSERT INTO @PivotExample
VALUES ('Jan', '2013', 5, 500),
('Jan', '2014', 15, 2500),
('Feb', '2013', 2, 300),
('Dec', '2013', 10, 400),
('Dec', '2013', 10, 400),
('Dec', '2014', 40, 4000)

SELECT YEAR
, JanPcs
, FebPcs
, DecPcs
, JanAmt
, FebAmt
, DecAmt
FROM (
SELECT YEAR
, MONTH + 'Pcs' AS MonthPcs
, MONTH + 'Amt' AS MonthAmt
, SumAmount = SUM(AMOUNT)
, SumPieces = SUM(PIECES)
FROM @PivotExample
GROUP BY PIECES, YEAR, MONTH, AMOUNT
) t
PIVOT(
SUM(SumPieces) FOR MonthPcs IN
(JanPcs, FebPcs, DecPcs)
)p1
PIVOT(
SUM(SumAmount) FOR MonthAmt IN
(JanAmt, FebAmt, DecAmt)
)p2
...
Рейтинг: 0 / 0
13.11.2018, 16:02
    #39732531
hewlett
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pivot multiple aggregate
RigersongDECLARE @PivotExample AS TABLE
(
MONTH VARCHAR(15),
YEAR VARCHAR(4),
PIECES int,
AMOUNT int
)

INSERT INTO @PivotExample
VALUES ('Jan', '2013', 5, 500),
('Jan', '2014', 15, 2500),
('Feb', '2013', 2, 300),
('Dec', '2013', 10, 400),
('Dec', '2013', 10, 400),
('Dec', '2014', 40, 4000)

SELECT YEAR
, JanPcs
, FebPcs
, DecPcs
, JanAmt
, FebAmt
, DecAmt
FROM (
SELECT YEAR
, MONTH + 'Pcs' AS MonthPcs
, MONTH + 'Amt' AS MonthAmt
, SumAmount = SUM(AMOUNT)
, SumPieces = SUM(PIECES)
FROM @PivotExample
GROUP BY PIECES, YEAR, MONTH, AMOUNT
) t
PIVOT(
SUM(SumPieces) FOR MonthPcs IN
(JanPcs, FebPcs, DecPcs)
)p1
PIVOT(
SUM(SumAmount) FOR MonthAmt IN
(JanAmt, FebAmt, DecAmt)
)p2


ага, т.е сначала просуммировать, потом перевернуть.
Одновременно не получается значит.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pivot multiple aggregate / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]