2016-11-04 1 views
1

Ich habe eine SQL-Ergebnismenge, die wie folgt aussieht:Wie glätte/pivotiere ich eine SQL-Ergebnismenge?

Sql Result Set

Wie kann ich dieses Ergebnis bekommen nur eine Zeile für jede ItemCode angezeigt werden? Die Verwendung einer GROUP BY scheint nicht zu funktionieren, da ich Spalten einfügen muss, die die Gruppierung verhindern, nach der ich suche.

Die Abfrage, die ich geschrieben habe, zieht Daten aus einer Tabelle mit einer Zeile für jedes Warehouse und ich versuche, es so zu formatieren, dass ich nur eine Zeile für jeden ItemCode habe. Ich denke, Schwenken der Begriff ist, was ich ..

hier zu tun bin versucht, was meine Abfrage sieht aus wie zur Zeit:

SELECT 
    ItemCode, 
    ISNULL((SELECT Quantity WHERE WhsCode = 10), 0) 'Whs10QTY', 
    ISNULL((SELECT Quantity WHERE WhsCode = 20), 0) 'Whs20QTY', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 10), 0) 'Whs10SalesAmt', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 20), 0) 'Whs20SalesAmt', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 10), 0) 'Whs10GrssProfit', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 20), 0) 'Whs20GrssProfit' 
FROM 
    @Table t 

Hinweis: ich Hilfe Umformulierung benötigen und diese Frage retitling, wie es zu machen nützlicher für die Gemeinschaft. Danke für jede Hilfe Jungs!

Antwort

1

Ich glaube, Sie diese als solche vereinfachen kann:

Select ItemCode 
     ,Whs10QTY  = sum(case when WhsCode = 10 then Quantity else 0 end) 
     ,Whs20QTY  = sum(case when WhsCode = 20 then Quantity else 0 end) 
     ,Whs10SalesAmt = sum(case when WhsCode = 10 then SalesAmt else 0 end) 
     ,Whs20SalesAmt = sum(case when WhsCode = 20 then SalesAmt else 0 end) 
     ,Whs10GrssProfit = sum(case when WhsCode = 10 then GrssProfit else 0 end) 
     ,Whs20GrssProfit = sum(case when WhsCode = 20 then GrssProfit else 0 end) 
From @Table t 
Group By ItemCode 
+0

Danke Sir! Das hat funktioniert. – Dezryth

+0

@Dezryth Glücklich zu helfen. –