1

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フィールドで結果グループとして取得したい

  1. T2 に CHECKING ステータスが存在する T1 からのレコードの数、

  2. 現在 T1 の NEW または CHECKING とは異なるステータスにある T1 からのレコードの数

  3. T1 で現在 CLOSED ステータスになっている T1 のレコード数。

.

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

しかし、内部結合を行った後、2 番目と 3 番目の列でより大きな結果が得られます。これを解決するには?ありがとうございました

4

2 に答える 2

0

これがDB2で機能するかどうかは不明です:

Select 
  ReportedBy,
  Count (Case When t2.Status = 'CHECKING' Then 1 End) As NumberHasChecking,
  Count (Distinct Case When t1.Status Not In ('NEW','CHECKING') Then t1.Id End) As NumberDifferentFromNewChecking, 
  Count (Distinct Case When t1.Status = 'CLOSED' Then t1.Id End) As NumberClosed
From
  t1
    Inner Join
  t2
    on t1.Id = t2.t1Id
Group By 
  ReportedBy
于 2012-12-23T21:02:54.227 に答える
0

これを試して:

select 
    reportedby,
    sum (T2.CheckingState) as NumberHasChecking, 
    count (case when T1.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 
    (
        SELECT 
            T1ID,
            COUNT(CASE WHEN STATUS='NEW'      THEN 1 END) NewState,
            COUNT(CASE WHEN STATUS='CHECKING' THEN 1 END) CheckingState,
            COUNT(CASE WHEN STATUS='CLOSED'   THEN 1 END) ClosedState
        FROM T2
        GROUP BY T1ID
    ) T2 ON T1.ID=T2.T1ID 
group by reportedby
于 2012-12-23T21:13:13.983 に答える