如何为以下结果编写 SQL 查询?

时间:2021-04-05 06:52:41

标签: sql sql-server tsql sql-server-2012 dynamic-pivot

这是我当前的表数据:

<头>
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

2 个答案:

答案 0 :(得分:0)

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',  'Product 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 是您的数据示例。请将引用替换为对实际表的引用

答案 1 :(得分:0)

由于仓库数量未知,您可以使用动态枢轴。

架构:

 create table mytable(Godown_Column varchar(50),    Product_Column  varchar(50), Quantity int)
 insert into mytable values('Godown 1', 'Product 1' ,10);
 insert into mytable values('Godown 1', 'Product 2' ,20);
 insert into mytable values('Godown 2', 'Product 3' ,30);
 insert into mytable values('Godown 3', 'Product 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,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

dbhere

相关问题