如何解决如何为以下结果编写 SQL 查询?
这是我当前的表数据:
Godown_Column | Product_Column | 数量 |
---|---|---|
货仓 1 | 产品 1 | 10 |
货仓 1 | 产品 2 | 20 |
货仓 2 | 产品 3 | 30 |
仓库 3 | 产品 3 | 40 |
此处,Godowns_Columns
具有无限数量的具有不同仓库的行。
如何编写 SQL 查询来获得此结果:
Product_Col | 仓库 1 | 仓库 2 | 仓库 3 |
---|---|---|---|
产品 1 | 10 | ||
产品 2 | 20 | ||
产品 3 | 30 | 40 |
解决方法
WITH GODOWNS(Godown_Column,Product_Column,Quantity) AS
(
SELECT 'Godown 1','Product 1',10 UNION ALL
SELECT 'Godown 1','Product 2',20 UNION ALL
SELECT 'Godown 2','Product 3',30 UNION ALL
SELECT 'Godown 3',40
)
SELECT D.Product_Column,MAX(CASE WHEN Godown_Column='Godown 1' THEN QUANTITY ELSE 0 END)AS GODOWN_1,MAX(CASE WHEN Godown_Column='Godown 2' THEN QUANTITY ELSE 0 END)AS GODOWN_2,MAX(CASE WHEN Godown_Column='Godown 3' THEN QUANTITY ELSE 0 END)AS GODOWN_3
FROM GODOWNS AS D
GROUP BY D.Product_Column
GODOWNS 是您的数据示例。请将引用替换为对实际表的引用
,由于仓库数量未知,您可以使用动态枢轴。
架构:
create table mytable(Godown_Column varchar(50),Product_Column varchar(50),Quantity int)
insert into mytable values('Godown 1',10);
insert into mytable values('Godown 1',20);
insert into mytable values('Godown 2',30);
insert into mytable values('Godown 3',40);
查询:
DECLARE @cols AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';
SET @cols = STUFF((SELECT distinct ',' + quotename(Godown_Column)
FROM mytable
FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)'),1,'')
set @query = 'SELECT Product_Column,' + @cols + '
from
(
select * from mytable
) x
pivot
(
sum(quantity)
for Godown_Column in (' + @cols + ')
) p'
execute(@query)
输出:
Product_Column | 货仓 1 | 货仓 2 | 仓库3 |
---|---|---|---|
产品 1 | 10 | null | null |
产品 2 | 20 | null | null |
产品 3 | null | 30 | 40 |
db
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。