1

基本上我要做的是计算审计/历史表中不存在的行数。我希望以下查询返回每个详细信息的计数。目前它在历史表中每行给我一个。

--Detail Table
ID    DETAIL_GROUP
1     A
2     B
3     B

--Detail History Table
DETAIL_ID_FK    VALUE1
1               NOT_MATCH
1               NOT_MATCH
2               MATCH
2               NOT_MATCH
3               MATCH
3               NOT_MATCH

SELECT D.DETAIL_GROUP, COUNT(*)
FROM DETAIL D
WHERE (NOT EXISTS(
          SELECT NULL
          FROM DETAIL_HISTORY HI 
          WHERE HI.D_ID_FK = D.ID 
          AND HI.VALUE1 = 'MATCH'))
GROUP BY D.DETAIL_GROUP; 

我想看到以下结果:

DETAIL_GROUP    COUNT(*)
A               1

但我收到以下结果:

DETAIL_GROUP    COUNT(*)
A               2

预先感谢您提供的任何帮助。

4

1 回答 1

0

假设您的明细表如下:

D_ID    VALUE1
1       MATCH
1       NOT_MATCH
2       MATCH
2       NOT_MATCH
3       MATCH
3       NOT_MATCH

以下查询:

SELECT d.detail_group, count(*)
FROM detail d
JOIN detail_history dh ON dh.d_id = d.id 
WHERE dh.value1 = 'MATCH'
GROUP BY d.detail_group

会产生:

DETAIL_GROUP    COUNT(*)
A                   1
B                   2

上面的查询创建了与 id 匹配的组,然后进入每个组并根据 value1 限制项目。

于 2013-07-19T11:35:07.123 回答