Dies ist ein Ansatz für jede Datenbank (einschließlich SQL Server), die nicht auf eine proprietäre PIVOT()
-Funktion angewiesen ist. Es ist ein bisschen komisch, das für 52 Wochen in einem solchen Beispiel zu tun (und, um die Wahrheit zu sagen, die 105 resultierenden Spalten sind nicht wirklich die beste Ausgabe für den Nutzen eines Menschen, der den Bericht liest). Nachdem ich das gesagt habe, mache ich das in diesem Beispiel eher für ein Vierteljahr als für Wochen, und Sie müssten die Ausdrücke nur 52 anstatt 4 Mal wiederholen. Sie könnten tatsächlich perl oder Visual Basic oder was auch immer Sie bevorzugen, um die Anweisung zu generieren. geht hier:
-- the input table, don't use in real query ...
WITH
input(id,quarter,orders,cost) AS (
SELECT 1,201601,200,1000
UNION ALL SELECT 1,201602,300,1500
UNION ALL SELECT 1,201603,330,1800
UNION ALL SELECT 1,201604,500,2500
)
-- end of input -
SELECT
id
, SUM(CASE quarter WHEN 201601 THEN orders END) AS "orders_201601"
, SUM(CASE quarter WHEN 201602 THEN orders END) AS "orders_201602"
, SUM(CASE quarter WHEN 201603 THEN orders END) AS "orders_201603"
, SUM(CASE quarter WHEN 201604 THEN orders END) AS "orders_201604"
, SUM(CASE quarter WHEN 201601 THEN cost END) AS "cost_201601"
, SUM(CASE quarter WHEN 201602 THEN cost END) AS "cost_201602"
, SUM(CASE quarter WHEN 201603 THEN cost END) AS "cost_201603"
, SUM(CASE quarter WHEN 201604 THEN cost END) AS "cost_201604"
FROM input
GROUP BY id;
id|orders_201601|orders_201602|orders_201603|orders_201604|cost_201601|cost_201602|cost_201603|cost_201604
1| 200| 300| 330| 500| 1,000| 1,500| 1,800| 2,500
Mögliche Duplikat [Zeilen zu Spalten Convert Pivot 'in SQL Server] (http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot -in-sql-server) – Ben
Welche Datenbank benutzen Sie? – Taryn
Ich benutze SQL Server 12 – user2827224