SQL - 基于多个键的值计数

时间:2016-06-20 21:54:28

标签: sql tsql

我是SQL的新手,并尝试创建一个查询以返回唯一值的计数,但是否计算一行取决于相关的另一行的值。我不确定这是否可以通过'Group By'或其他功能完成。

让我试着解释一下。这是数据的样子。有一些不确定的行数。为简单起见,我只为每个ITEM_NUMBER说明了两个允许的值。

CUSTOMER_ID ITEM_NUMBER LINE    DISPLAY_VALUE
1           10          1       A
1           20          1       Y
1           30          1       C
1           10          2       B
1           20          2       X
1           30          2       C
2           10          1       B
2           20          1       X
2           30          1       D
2           10          2       A
2           20          2       Y
2           30          2       D

现在,我只想在相应的LINE / CUSTOMER_ID上的ITEM_NUMBER 20的值等于'X'时返回CUSTOMER_ID的有效行。这些将是第一组过滤结果。

CUSTOMER_ID ITEM_NUMBER LINE    DISPLAY_VALUE
1           10          2       B
1           20          2       X
1           30          2       C
2           10          1       B
2           20          1       X
2           30          1       D

接下来,我想获得一个按DISPLAY_VALUE和ITEM_NUMBER分组的计数。 示例代码:

SELECT COUNT(*) as 'Count', DISPLAY_VALUE, ITEM_NUMBER
FROM tmp.DB
GROUP BY DISPLAY VALUE, ITEM_NUMBER

理想情况下,它会返回以下内容:

Count   ITEM_NUMBER    DISPLAY_VALUE
2       10             B
2       20             X
1       30             C
1       30             D

1 个答案:

答案 0 :(得分:0)

我无法对此进行测试,但我认为您需要以下内容:

select count(*),DISPLAY_VALUE,ITEM_NUMBER
from tmp.DB
inner join (
   select LINE,CUSTOMER_ID 
   from tmp.DB
   where DISPLAY_VALUE = 'X'
   ) x on x.LINE=tmp.DB.LINE and x.CUSTOMER_ID=tmp.DB.CUSTOMER_ID
group by DISPLAY_VALUE,ITEM_NUMBER