我是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
答案 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