这样的数据表我想统计 A仓库 B仓库的 产品数量显示格式如下产品名称  A仓库数量   B仓库数量
羽毛球      10           4
乒乓球      5            7
篮球        5            0
足球        8            0
篮球架      0            5
球衣        0            5
球鞋        0           10
...         ..          ..
相同的物品 显示一次 分别显示在A 和 B仓库中
不相同的 依次显示 
这样的SQL查询 如何实现?

解决方案 »

  1.   

    select 产品名称,
      sum(case when 类型='A仓库' then 产品数量 else 0 end) as [A仓库数量],
      sum(case when 类型='B仓库' then 产品数量 else 0 end) as [B仓库数量]
    from tb
    group by 产品名称
      

  2.   

    select 产品名称,
           max(case 类型 when A仓库 then 产品数量 else null end) as A仓库数量,
           max(case 类型 when B仓库 then 产品数量 else null end) as B仓库数量
    from tb
    group  by 产品名称
      

  3.   

    select a.产品名称,B.仓库类型 from a  LEFTER OUTER JOIN 
                 (select 仓库类型 from a group by 仓库类型)as b  on a.仓库类型 = b.仓库类型pivot
    (sum(产品数量) 
        FOR 仓库类型 IN (select 仓库类型 from a group by 仓库类型 ))
      

  4.   

    WITH test (ID,[类型],[产品名称],[产品数量])
     AS
     (
     SELECT 1,'A仓库','羽毛球',10
     UNION ALL 
     SELECT 2,'A仓库','乒乓球',5
     UNION ALL 
     SELECT 3,'A仓库','篮球',5
     UNION ALL 
     SELECT 4,'A仓库','足球',8
     UNION ALL 
     SELECT 5,'B仓库','篮球',7
     UNION ALL 
     SELECT 6,'B仓库','乒乓球',5
     UNION ALL 
     SELECT 7,'B仓库','足球',10
     UNION ALL 
     SELECT 8,'B仓库','羽毛球',9
     UNION ALL 
     SELECT 9,'B仓库','足球',6
     UNION ALL 
     SELECT 10,'C仓库','羽毛球',8
     UNION ALL 
     SELECT 11,'C仓库','篮球',2
     UNION ALL 
     SELECT 12,'C仓库','羽毛球',10
     UNION ALL 
     SELECT 13,'C仓库','乒乓球',10
     )
     SELECT [产品名称],[A仓库数量]=MAX(CASE WHEN [类型]='A仓库'THEN [产品数量] ELSE 0 END ),[B仓库数量]=MAX(CASE WHEN [类型]='B仓库'THEN [产品数量] ELSE 0 END )
     FROM test
     GROUP BY 产品名称
     
     /*
     产品名称   A仓库数量       B仓库数量
     ------ ----------- -----------
     篮球     5           7
     乒乓球    5           5
     羽毛球    10          9
     足球     8           10
     
     (4 行受影响)
     
     
     */
      

  5.   


    if OBJECT_ID('TEST2') IS NOT NULL
    DROP TABLE TEST2
    GO
    CREATE table test2(id int identity(1,1),house_name varchar(10),product_type varchar(10),quantity int)
    insert into test2
    select 'A仓库','羽毛球',10 union all
    select 'A仓库','乒乓球',6 union all
    select 'B仓库','乒乓球',15 union all
    select 'B仓库','蓝球',10
    go
    select * from test2
    select product_type,sum(case house_name when 'A仓库' then quantity else 0 end)  as 'A仓库',
    SUM(case house_name when 'B仓库' then quantity else 0 end) as 'B仓库'
    from test2
    group by product_type
    /*
    ----------- ---------- ------------ -----------
    1           A仓库        羽毛球          10
    2           A仓库        乒乓球          6
    3           B仓库        乒乓球          15
    4           B仓库        蓝球           10(4 row(s) affected)product_type A仓库         B仓库
    ------------ ----------- -----------
    蓝球           0           10
    乒乓球          6           15
    羽毛球          10          0(3 row(s) affected)
    */
      

  6.   

    多表的话可以执行么?
    比如 仓库 和 产品名称 都在不同的表里面 这个表里面显示的只是ID
    这样我写了一个 一直提示错误SELECT ([仓库表].[FName]) AS [库房名称], ([物料表].[FName]) AS [物料名称], sum(Case When [仓库表].[FName] = '其他库' Then [存货表].[FBal] Else 0 End) AS [存货数量]
     FROM [t_Stock] AS [仓库表] INNER JOIN ([ICInventory] AS [存货表] INNER JOIN [t_ICItem] AS [物料表] ON [存货表].[FItemID]=[物料表].[FItemID]) ON [仓库表].[FItemID]=[存货表].[FStockID] GROUP BY [存货表].[FItemID]