0

次のテーブル Issue、IssueStatus および CustomTable(CT) があります。以下は同じデータです。

Issue:                       Issuestatus:                    CT

Issue|pkey|issuestatus       id | pname                     Issue|Referred
----------------------------------------------------------------------------
100     T-1  1                  1   Open                       100     NULL
200     T-2  2                  2   Closed                     200     NULL 
300     T-3  3                  3   Acknowledged               700     Dev
400     T-4  4                  4   In Progress                800     QA
500     T-5  1                  5   Referred                   800     NULL 
600     T-6  2                                                 400     NULL
700     T-7  5                                                 500     NULL   
800     T-8  5                                                 700     NULL

次のような出力が必要です

pname      |  Count
Open           2
Closed         2
Acknowledged   1
In Progress    1
Dev            1 
QA             1

したがって、グループ化しissuestatusて のカウントを取得する必要がありますがpkeyissuestatusが「参照」の場合は、CT テーブルを調べて、グループ化で対応する参照列テキストを取得する必要があります。CT の問題は、問題テーブルの問題にリンクされています。

これは私が試したものですが、正しい出力ではありません

select pname = case 
    when pname='Referred' then CT.Referred 
    else pname end,
    COUNT(pkey) 
from  CT,issue a,issuestatus
where a.issuestatus=issuestatus.id and a.issue=CT.ISSUE 
group by pname,CT.Referred
4

3 に答える 3

2

私はあなたが望むものを正確に与える次のクエリをテストしました

それを試してみてください

WITH T1 AS (
  SELECT (CASE WHEN pname='Referred' THEN Referred ELSE pname END)AS [pn]
  FROM (SELECT i.Issue,c.Referred,iss.pname
        FROM Issue i
        INNER JOIN IssueStatus iss ON i.issuestatus=iss.id
        LEFT OUTER JOIN CT c ON c.Issue=i.Issue
       ) t
)


SELECT pn,count(*) AS cnt
FROM T1
WHERE pn IS NOT NULL
GROUP BY pn
ORDER BY cnt DESC

ここにSQLFiddleがあります

于 2013-09-04T07:06:06.217 に答える
0

これを試して。テストデータのスクリプトがないため、テストしていません。

   select case when pname='Referred' then CT.Referred else pname end pname, COUNT(*) cnt
    from  CT,issue a,issuestatus
    where a.issuestatus=issuestatus.id and a.issue=CT.ISSUE 
    group by case when pname='Referred' then CT.Referred else pname end
于 2013-09-04T06:23:36.817 に答える