2016-06-20 42 views
0

我是SQL新手,尝试创建一个查询以返回唯一值的计数,但是否计算行取决于与其相关的另一行的值。我不确定这是否可以通过“分组”或其他功能完成。SQL - 基于多个键的值计数

让我试着解释。这里是数据的样子。有不确定的行数。为了简单起见,我只说明了每个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 

,我只想要回有效行的CUSTOMER_ID时对应行/ CUSTOMER_ID为20 ITEM_NUMBER的值等于“X”。这将是第一组过滤结果。

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

我不能对此进行测试,但我认为你需要以下条件:

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 
+0

感谢菲尔!这工作像一个魅力。为了将来的参考,是否有一个SQL术语用于在内部联接中使用选择来限制结果? – Matt

+0

@Matt - 我不知道这样的术语,但技术是一种常见的设计模式,所以它可能应该有一个 - 可能有一个机会,我们可以投资一个术语,并得到一些维基百科的认可:) –