2016-10-09 2 views
1

Ich habe sum() über PARTITION für die Verkaufsdaten jeden Monat nach Zweig ausgewählt und verwendet. Ich habe versucht, Gruppe, aber dann konnte ich nicht die Filiale Gesamtumsatz.So verbinden Sie zwei Lieferantenergebnisse

Und ich möchte speziell die Ergebnisse von zwei Lieferanten und deren Wert in Prozent zum Gesamtumsatz sehen.

SELECT 

distinct sv.Branch 'Branch', 
dim.ExclusiveGroup_KEY 'Exclusive Tag', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 1', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 2', 
sum(sv.Revenue) over (PARTITION by sv.Branch) 'Branch Overall', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY)/sum(sv.Revenue) over (PARTITION by sv.Branch) 'Amount %' 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 

Aber die Ausgabe setzt die Ergebnisse auf separaten Zeilen.

|Branch|Exclusive Tag|Supplier 1|Supplier 2|Branch Overall|Amount %| 
|000001|EXCLSUPPLIER1|700  |700  |25000   |2.8% | 
|000001|EXCLSUPPLIER2|1400  |1400  |25000   |5.6% | 
|000002|EXCLSUPPLIER1|1300  |1300  |60000   |2.2% | 
|000002|EXCLSUPPLIER2|800  |800  |60000   |1.3% | 

Ich möchte die Ergebnisse so etwas wie dieses

|Branch|Supplier 1|Supplier 2|Branch Overall|Supp1 %|Supp2 %| 
|000001|700  |1400  |25000   |2.8% |5.6% | 
|000002|1300  |800  |60000   |2.2% |1.3% | 

Bitte lassen Sie mich wissen, welche Änderungen ich auf die Codes machen, die gewünschten Ergebnisse zu zeigen. Jede Hilfe oder Anregung wird sehr geschätzt!

+0

Verwenden Sie MS SQL Server? Wenn ja - welche Version? –

Antwort

0

Es ist nicht die beste Lösung und es ist nicht die letzte Lösung, aber ich habe nicht genug Informationen - zum Beispiel weiß ich nicht, wie Sie sich an Dim-Tabelle anschließen. Ich schätze, du solltest PIVOT benutzen. Hier geht etwas dreckige Lösung:

SELECT sv.Branch [Branch] 
--,dim.ExclusiveGroup_KEY [Exclusive Tag] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER1') [Supplier 1] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER2') [Supplier 2] 
,SUM(sv.Revenue) [Branch Overall] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER1')/SUM(sv.Revenue) [Supp1] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER2')/SUM(sv.Revenue) [Supp2] 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 1', 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 2', 
--sum(sv.Revenue) over (PARTITION by sv.Branch) 'Branch Overall', 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY)/sum(sv.Revenue) over (PARTITION by sv.Branch) 'Amount %' 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 
GROUP BY sv.Branch 
+0

full join DIM_product als Dim auf dim.Product_KEY = sv.Product – Dan

0

Verwendung group by:

SELECT sv.Branch, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER1' then sv.Revenue else 0 end) as Supplier1, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER2' then sv.Revenue else 0 end) as Supplier2, 
     sum(sv.Revenue) as Branch, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER1' then sv.Revenue else 0 end)/sum(sv.Revenue) as Supplier1_ratio, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER2' then sv.Revenue else 0 end)/sum(sv.Revenue) as Supplier2_ratio 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 
GROUP BY sv.Branch; 

Ihr Problem ist ein Problem der Verschwenkung oder bedingter Aggregation. Ich bin mir nicht sicher, warum Sie dies mit select distinct und Fensterfunktionen nähern würden.

+0

ja, Pivoting funktioniert für mein Problem. Und deine Codes funktionieren perfekt nach meinen Bedürfnissen. Vielen Dank Kumpel. Ich werde jetzt ein wenig über das Schwenken in SQL recherchieren :) – Dan

Verwandte Themen