销售产品的数量和分组数量

时间:2013-04-19 18:32:44

标签: sql-server sql-server-2008 tsql sql-server-2005

我有一张桌子交易&表产品如下。 每笔交易都有多个产品。

  ProductId Name
      1      ABC
      2      DEF
      3      GHI

每笔交易都可以销售多件产品。

TransactionId ProductSoldInDept1 ProductSoldinDept2 ProductSoldinDept3
        1         1                       null         null
        2         1                        2           null
        3         3                        1           null
        4         2                        3             1  

我打算生成一份报告,我希望得到这样的结果:

显示按ID划分的每个部门销售的产品数量

预期结果:

ProductID Department1ProdCount Department2ProdCount Department3ProdCount 
  1           2                           1             1                    
  2           1                           1             0
  3           1                           1             0 

我可以到这里,这是一个查询来获取一个特定产品的计数 这是产品:1 我想知道如何在这里使用一个小组:

select Count(CASE WHEN ProductSoldInDept1 = 1 THEN 1 END) ,
    Count(CASE WHEN ProductSoldInDept2 = 1 THEN 1 END) ,
      Count(CASE WHEN ProductSoldInDept3 = 1 THEN 1 END)
from   Table1 

3 个答案:

答案 0 :(得分:4)

SELECT
  p.ProductID,
  Dept1ProdCount = COUNT(CASE WHEN t.ProductSoldInDept1 = p.ProductID THEN 1 END),
  Dept2ProdCount = COUNT(CASE WHEN t.ProductSoldInDept2 = p.ProductID THEN 1 END),
  Dept3ProdCount = COUNT(CASE WHEN t.ProductSoldInDept3 = p.ProductID THEN 1 END)
FROM dbo.Product AS p
LEFT OUTER JOIN dbo.[Transaction] AS t
ON p.ProductID IN  
  (t.ProductSoldInDept1, t.ProductSoldinDept2, t.ProductSoldinDept3)
GROUP BY p.ProductID;

<强>结果

| PRODUCTID | DEPT1PRODCOUNT | DEPT2PRODCOUNT | DEPT3PRODCOUNT |
----------------------------------------------------------------
|         1 |              2 |              1 |              1 |
|         2 |              1 |              1 |              0 |
|         3 |              1 |              1 |              0 |

See a demo

答案 1 :(得分:0)

试试这个

select ProductID, 
v.Department1ProdCount, v.Department2ProdCount, v.Department3ProdCount
from product a
cross apply 
(
 select Count(CASE WHEN ProductSoldInDept1 = a.ProductID THEN 1 END) Department1ProdCount,
 Count(CASE WHEN ProductSoldInDept2 = a.ProductID THEN 1 END) Department2ProdCount,
 Count(CASE WHEN ProductSoldInDept3 = a.ProductID THEN 1 END) Department3ProdCount
 from  Table1
) v

答案 2 :(得分:0)

此:

  TransactionId ProductSoldInDept1 ProductSoldinDept2 ProductSoldinDept3
    1         1                       null         null
    2         1                        2           null
    3         3                        1           null
    4         2                        3             1  

的结构可能更好:

transid   prodsold    deptid
1         1           1
2         1           1
2         2           2
3         3           1
3         1           2
4         2           1
4         3           2
4         1           3

我认为这会让您的查询更容易编写。