【发布时间】:2012-12-10 11:30:57
【问题描述】:
我的 SQL 查询有问题
我有
T1:
ID STATUS REPORTEDBY
1 CLOSED USER1
2 CLOSED USER2
3 NEW USER1
4 INPRG USER1
5 CLOSED USER1
T2:
T1ID STATUS
1 NEW
1 CHECKING
1 CLOSED
2 NEW
2 CHECKING
2 CLOSED
3 NEW
4 CHECKING
4 INPRG
5 INPRG
5 CLOSED
结果我想得到这个:
USER NumberHasCHECKING NumberDifferentFromNewChecking NumberClosed
USER1 2 3 2
USER2 1 1 1
我想通过 REPORTEDBY 字段作为结果组
T1 中在 T2 中存在 CHECKING 状态的记录数,
T1 中现在处于不同于 T1 中 NEW 或 CHECKING 状态的记录数
以及 T1 中当前在 T1 中处于 CLOSED 状态的记录数。
.
select reportedby,count (case when T2.status='CHECKING' then 1 end) as NumberHasChecking,
count (case when T2.status not in ('NEW','CHECKING') then 1 end) as NumberDifferentFromNewChecking,
count (case when T1.status='CLOSED' then 1 end) as NumberClosed
from t1
inner join t2 on T1.ID=T2.T1ID
group by reportedby
但是在我进行内部连接之后,我在第二列和第三列得到了更好的结果。 如何解决这个问题? 谢谢
【问题讨论】:
-
您的查询看起来不像是有效的 SQL。无论如何,对于左表中的所有匹配项,连接都会重复右表中的所有行。您可以使用子查询或
count(distinct t3.id)来计算唯一行数。
标签: sql count db2 inner-join