powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pivot multiple aggregate
4 сообщений из 4, страница 1 из 1
Pivot multiple aggregate
    #39732468
hewlett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос почему неправильно суммируются дубли в 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
Pivot multiple aggregate
    #39732494
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hewlett,

В плане запроса в Stream Aggregate поле amount входит в условие группировки group by. А для последующего PIVOT - а - нет.
...
Рейтинг: 0 / 0
Pivot multiple aggregate
    #39732521
Rigersong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Pivot multiple aggregate
    #39732531
hewlett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Pivot multiple aggregate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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