1

以下のようにテーブルトランザクションとテーブル製品があります。各トランザクションには複数の製品があります。

  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 

ここまで取得できます。これは、productid である特定の製品のカウントを取得するためのクエリです: 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 
4

3 に答える 3

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;

結果

| | 製品 ID | DEPT1PRODCOUNT | DEPT2PRODCOUNT | DEPT3PRODCOUNT |
-------------------------------------------------- --------------
| | 1 | 2 | 1 | 1 |
| | 2 | 1 | 1 | 0 |
| | 3 | 1 | 1 | 0 |

デモを見る

于 2013-04-19T18:50:36.970 に答える
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
于 2013-04-19T18:48:55.270 に答える
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

これにより、クエリが書きやすくなると思います。

于 2013-04-19T18:53:54.743 に答える