Gruppierung von Nebenwerten in einer Gruppe in PIVOT

Bitte beachten Sie dieses Szenario:

Wir haben Bestelltabelle, die Aufträge Spezifikationen speichert. Eine dieser Spezifikationen ist Währung. Ich habe mehrere Währung in diesem Tisch wie Dollar, Euro, Pfund, Yen, Dirham, Rial, Rupie . Dollar, Euro, Pfund sind Hauptwährungen. Ich möchte andere in 1 Gruppe in meiner Abfrage gruppieren. Wie kann ich das mit dem PIVOT Befehl machen?

Ich möchte dieses Ergebnis erstellen:

 ProductCategory Dollar Euro Pound Others --------------------------------------------------------------- P1 1000 2000 500 880 P2 1200 100 200 750 P3 1900 8000 700 640 P4 1500 500 1000 270 P5 2000 1700 1200 1000 

Vielen Dank


Update 1)

Meine Quelltabelle ist wie:

 ProductCategory Currency Amount ---------------------------------------- P1 Dollar 100 P2 Euro 500 P3 Dollar 100 P4 Yen 200 P1 Dollar 100 P3 Rupee 50 ... 

Update 2)

 declare @tbl table ( Product nvarchar(50), Cur nvarchar(50), Amount int ) insert into @tbl values ('p1', 'dollar',100), ('p2', 'euro',100), ('p3', 'pound',100), ('p1', 'a',100), ('p1', 'b',100), ('p2', 'c',100), ('p3', 'dollar',100), ('p3', 'euro',100), ('p2', 'euro',100), ('p2', 'euro',100), ('p1', 'j',100) SELECT pv.Product ,ISNULL(pv.Dollar,0) AS [Dollar] ,ISNULL(pv.Euro,0) AS [Euro] ,ISNULL(pv.Pound,0) AS [Pound] ,ISNULL(pv.Other,0) AS [Other] FROM ( SELECT * ,CASE WHEN [Cur] NOT IN ('dollar','euro','pound') THEN 'Other' ELSE [Cur] END AS [newCurrency] FROM @tbl )as a PIVOT ( SUM([Amount]) FOR [newCurrency] IN ([dollar],[euro],[pound],[Other]) )as pv 

und dieses Ergebnis erhalten:

Bildbeschreibung hier eingeben

Du warst fast da Ändern Sie Ihre Abfrage wenig ein bisschen in Update 2. Ich denke, das ist, was Sie wollen.

 declare @tbl table ( Product nvarchar(50), Cur nvarchar(50), Amount int ) insert into @tbl values ('p1', 'dollar',100), ('p2', 'euro',100), ('p3', 'pound',100), ('p1', 'a',100), ('p1', 'b',100), ('p2', 'c',100), ('p3', 'dollar',100), ('p3', 'euro',100), ('p2', 'euro',100), ('p2', 'euro',100), ('p1', 'j',100) SELECT pv.Product ,sum(ISNULL(pv.Dollar,0)) AS [Dollar] ,sum(ISNULL(pv.Euro,0)) AS [Euro] ,sum(ISNULL(pv.Pound,0)) AS [Pound] ,sum(ISNULL(pv.Other,0)) AS [Other] FROM ( SELECT * ,CASE WHEN [Cur] NOT IN ('dollar','euro','pound') THEN 'Other' ELSE [Cur] END AS [newCurrency] FROM @tbl )as a PIVOT ( SUM([Amount]) FOR [newCurrency] IN ([dollar],[euro],[pound],[Other]) )as pv group by product 

versuchen Sie diese Abfrage

  SELECT pv.ProductCategory ,ISNULL(pv.Dollar,0) AS [Dollar] ,ISNULL(pv.Euro,0) AS [Euro] ,ISNULL(pv.Pound,0) AS [Pound] ,ISNULL(pv.Other,0) AS [Other] FROM ( SELECT * ,CASE WHEN [Currency] NOT IN ('Dollar','Euro','Pound') THEN 'Other' ELSE [Currency] END AS [newCurrency] FROM #tmp )as a PIVOT ( MAX([Amount]) FOR [newCurrency] IN ([Dollar],[Euro],[Pound],[Other]) )as pv 

Versuchen Sie diese Abfrage, Sie können die andere Währung auf der Grundlage des Produkts summieren.

 select productCategory, sum(dollar), sum(euro), sum(pound), sum(others) from order group by productCategory 

Hoffe, es wird helfen.