在 PIVOT 中将子值分组为一组
Grouping Subsidiary Values in one groups in PIVOT
请考虑这种情况:
我们有存储订单规格的订单 table。这些规范之一是货币。我在 table 中有几种货币,例如 美元、欧元、英镑、日元、迪拉姆、里亚尔、卢比 。 美元、欧元、英镑是主要货币。我想在我的查询中将其他人分组为一组。我如何使用 PIVOT
命令来做到这一点?
我想创建这样的结果:
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
谢谢
更新 1)
我的来源 table 是这样的:
ProductCategory Currency Amount
----------------------------------------
P1 Dollar 100
P2 Euro 500
P3 Dollar 100
P4 Yen 200
P1 Dollar 100
P3 Rupee 50
...
更新 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
得到这个结果:
试试这个查询,您可以根据产品对其他货币求和。
select productCategory,
sum(dollar),
sum(euro),
sum(pound),
sum(others)
from order
group by productCategory
希望对您有所帮助。
试试这个查询
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
你快到了。在更新 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
,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
请考虑这种情况:
我们有存储订单规格的订单 table。这些规范之一是货币。我在 table 中有几种货币,例如 美元、欧元、英镑、日元、迪拉姆、里亚尔、卢比 。 美元、欧元、英镑是主要货币。我想在我的查询中将其他人分组为一组。我如何使用 PIVOT
命令来做到这一点?
我想创建这样的结果:
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
谢谢
更新 1)
我的来源 table 是这样的:
ProductCategory Currency Amount
----------------------------------------
P1 Dollar 100
P2 Euro 500
P3 Dollar 100
P4 Yen 200
P1 Dollar 100
P3 Rupee 50
...
更新 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
得到这个结果:
试试这个查询,您可以根据产品对其他货币求和。
select productCategory,
sum(dollar),
sum(euro),
sum(pound),
sum(others)
from order
group by productCategory
希望对您有所帮助。
试试这个查询
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
你快到了。在更新 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
,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