2017-05-03 1 views
-4

Ich habe die Tabelle im folgenden FormatSQL Pivot 2 Spalten

Table View

Ich glaube, mein Problem als die mögliche doppelte Frage ein bisschen einzigartig ist, und ich versuche, sich wiederholende 201601 zu bekommen ... 201652 Spalten für die zwei Metriken Bestellungen und Kosten.

+3

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

+0

Welche Datenbank benutzen Sie? – Taryn

+0

Ich benutze SQL Server 12 – user2827224

Antwort

0

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