基本上我要做的是计算审计/历史表中不存在的行数。我希望以下查询返回每个细节一个计数。目前它在历史表中每行给我一个。
--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
提前感谢您提供的任何帮助。
答案 0 :(得分: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限制项目。