Sql server 分组依据子句

Sql server 分组依据子句,sql-server,tsql,group-by,case-when,Sql Server,Tsql,Group By,Case When,我有下表Issue、IssueStatus和CustomTable(CT)。下表中的数据相同 Issue: Issuestatus: CT Issue|pkey|issuestatus id | pname Issue|Referred ---------------------------------------------------------------

我有下表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
分组并获取
pkey
的计数,但是当
issuestatus
被“引用”时,您需要在CT表中查找并获取group by中相应的引用列文本。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

试试这个。因为没有测试数据的脚本,所以没有测试它

   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

试试这个。因为没有测试数据的脚本,所以没有测试它

   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
试试这个

 SELECT pname, COUNT(pname)
    FROM (SELECT (CASE WHEN Pname='Referred'  THEN CT.referred else st.pname END)AS pname
            FROM Issue a JOIN IssueStatus st
            ON a.issuestatus = st.id LEFT OUTER JOIN CT
            ON a.Issue = CT.Issue) tbl
    GROUP BY pname
    HAVING pname IS NOT NULL;
这是你的建议试试这个

 SELECT pname, COUNT(pname)
    FROM (SELECT (CASE WHEN Pname='Referred'  THEN CT.referred else st.pname END)AS pname
            FROM Issue a JOIN IssueStatus st
            ON a.issuestatus = st.id LEFT OUTER JOIN CT
            ON a.Issue = CT.Issue) tbl
    GROUP BY pname
    HAVING pname IS NOT NULL;

下面是我测试的查询,它给出了您想要的内容

试试看

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

下面是我测试的查询,它给出了您想要的内容

试试看

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

这是

这是SQL Server吗compatible@Alfaromeo查询已编辑,第一个查询与mysql兼容。请在sql server上尝试此操作,我将“case-when”改为“if”。我正在使用CT。参考“无法创建多部分标识符found@Alfaromeo使用c.代替CT。Referred@Alfaromeo,很抱歉,因为我没有用于测试的sql server,但查询逻辑非常完美,所以请测试它并答复我。这是sql server吗compatible@Alfaromeo查询已编辑,第一个查询与mysql兼容。请在sql server上尝试此操作,我改变了“case-when”而不是if“无法创建多部分标识符found@Alfaromeo使用c.代替CT。Referred@Alfaromeo,很抱歉,因为我没有用于测试的sql server,但查询逻辑非常完美,所以请测试它并回复我。伙计,这只输出Dev和QA组计数的数据。它不输出其余状态CT表实际上可以包含未处于参考状态的问题的参考值。已更新小提琴,请检查,输出为weiryDude,这将输出Dev和QA单独的组计数数据。它不输出状态的其余部分CT表实际上可以包含未处于参考状态的问题的参考值。已更新小提琴,请检查,输出正确