Ist es möglich, auf mehreren aggregierten Spalten in SQL Server zu drehen? Ich habe die folgende Reihenfolge Tabelle:SQL Server-Pivot auf 2 (oder mehreren) Aggregaten
[ORDERS]
| CustName | OrderedProduct | QtyOrdered | UnitCost | UnitPrice | OrderDate
Bob | Canned Tuna | 6 | 11 | 14 | 21-12-2016 13:11:00
Steve | Canned Salmon | 2 | 15 | 19 | 03-11-2016 11:03:00
Bob | Canned Tuna | 10 | 10 | 13 | 22-12-2016 10:43:00
Bob | Canned Tuna | 4 | 9 | 10 | 13-11-2016 17:22:00
Ich habe folgende Pivot-Abfrage, die mir eine Bestellmenge pro Produkt für Monate November/Dezember pro Kunde gibt:
SELECT CustName, OrderedProduct, [VOL Dec 2016], [VOL Nov 2016] FROM
(
SELECT CustName, OrderedProduct, QtyOrdered,
'VOL ' + CONVERT(CHAR(4), OrderDate, 100) + CONVERT(CHAR(4), OrderDate, 120) AS YearMonthVol
FROM [ORDERS]
) src
PIVOT
(
SUM(QtyOrdered)
FOR YearMonthVol IN ([VOL Dec 2016], [VOL Nov 2016])
) pvtvol
WHERE CustName='Bob'
Dies gibt dem, erwartet Ergebnis
CustName | OrderedProduct | VOL Dec 2016 | VOL Nov 2016
Bob | Canned Tuna | 16 | 4
Was ich will, ist auch Pivot auf Margin so Ändern der src Abfrage:
SELECT CustName, OrderedProduct, QtyOrdered,
((UnitPrice-UnitCost)*QtyOrdered) AS Margin,
'VOL ' + CONVERT(CHAR(4), OrderDate, 100) + CONVERT(CHAR(4), OrderDate, 120) AS YearMonthVol
'MAR ' + CONVERT(CHAR(4), OrderDate, 100) + CONVERT(CHAR(4), OrderDate, 120) AS YearMonthMar
FROM [ORDERS]
ich folgende geänderte Abfrage versucht haben, eine zweite Dreh Zugabe
SELECT CustName, OrderedProduct, [VOL Dec 2016], [VOL Nov 2016], [MAR Dec 2016], [MAR Nov 2016] FROM
(
SELECT CustName, OrderedProduct, QtyOrdered,
((UnitPrice-UnitCost)*QtyOrdered) AS Margin,
'VOL ' + CONVERT(CHAR(4), OrderDate, 100) + CONVERT(CHAR(4), OrderDate, 120) AS YearMonthVol
'MAR ' + CONVERT(CHAR(4), OrderDate, 100) + CONVERT(CHAR(4), OrderDate, 120) AS YearMonthMar
FROM [ORDERS]
) src
PIVOT
(
SUM(QtyOrdered)
FOR YearMonthVol IN ([VOL Dec 2016], [VOL Nov 2016])
) pvtvol
PIVOT
(
SUM(Margin)
FOR YearMonthMar IN ([MAR Dec 2016], [MAR Nov 2016])
) pvtmar
WHERE CustName='Bob'
Die Tabelle würde ich ERWARTEN zu sehen ist
CustName | OrderedProduct | VOL Dec 2016 | VOL Nov 2016 | MAR Dec 2016 | MAR Nov 2016
Bob | Canned Tuna | 16 | 4 | 48 | 4
Die Tabelle I tatsächlich siehe ist
CustName | OrderedProduct | VOL Dec 2016 | VOL Nov 2016 | MAR Dec 2016 | MAR Nov 2016
Bob | Canned Tuna | 16 | NULL | 48 | NULL
Bob | Canned Tuna | NULL | 4 | NULL | 4
Also, der Drehpunkt am Rand scheint nicht angewendet zu werden, und ich bekomme eine Zeile für jede Bestellung. Ist das, was ich versuche zu erreichen, tatsächlich möglich mit der Methode, die ich versuche zu verwenden, oder wäre ich besser eine Kreuztabellenabfrage für VOL und MAR oder eine Mischung aus Pivot und Kreuztabellen (Pivot für VOL, Kreuztabelle für MAR?)
Jeder Rat sehr geschätzt.
Fügen Sie eine 'GROUP BY CustName, OrderedProduct' in Ihrer zweiten Abfrage hinzu. –
Zur Abfrage ** src **? Dasselbe Ergebnis, wenn ich das mache, und ich bin auch gezwungen, QtyOrdered in der GROUP BY – Gord
Nein zur letzten Abfrage mit zwei Pivots aufzunehmen. Ich denke, das ist was fehlt. –