1

我有一张如下表。

Id Product1 Product2 Product3
1     1      null     null
2     1       2       null
3     3       1       null
4     2       3        1  

现在我想编写一个查询来计算 Product 1 的条目。在上述情况下, Product1 为 2 , Product2 为 1 , Product 3 为 1

我想出了一个类似这样的查询。

select
Count(Product1) +
Count(Product2) +
Count(Product3)
from  
Table 
where Product1  =  1

但它给了我一个不准确的结果。有没有办法获得每种产品的出现次数?

通过...分组

所需的输出将是这样的:

ProductID Product1Count Product2Count Product3Count 
  1           2              1             1                    
  2           1              1             0
  3           1              1             0 
4

2 回答 2

3
select Count(CASE WHEN Product1 = 1 THEN 1 END) +
       Count(CASE WHEN Product2 = 1 THEN 1 END) +
       Count(CASE WHEN Product3 = 1 THEN 1 END)
from   Table1 
where  1 IN (Product1, Product2, Product3)

添加这一行的原因是:where 1 IN (Product1, Product2, Product3)只计算受影响的行,从而使其比运行所有记录更快。

于 2013-04-19T16:41:16.563 回答
2

像这样的东西会起作用:

SELECT
SUM(CASE WHEN Product1 = 1 THEN 1 ELSE 0 END)
+ SUM(CASE WHEN Product2 = 1 THEN 1 ELSE 0 END)
+ SUM(CASE WHEN Product3 = 1 THEN 1 ELSE 0 END)
FROM Table
于 2013-04-19T16:40:51.347 回答