Sql server 需要关于获取分组计数的帮助吗
我有一个包含以下列的SQL表Sql server 需要关于获取分组计数的帮助吗,sql-server,Sql Server,我有一个包含以下列的SQL表 表1 Site Det FailFlag Comments ModifiedDate ModifiedBy ABT A01 F Dfasdf 10/11/2011 Anna ABT A01 F dsfsdf 15/12/2012 Mand ABT A01 Rds 30/03/2011 Tim ABT A01 G
表1
Site Det FailFlag Comments ModifiedDate ModifiedBy
ABT A01 F Dfasdf 10/11/2011 Anna
ABT A01 F dsfsdf 15/12/2012 Mand
ABT A01 Rds 30/03/2011 Tim
ABT A01 GHDs 02/12/2012 Andy
ABT A02 F dfd 09/05/2012 Anna
ABT A02 sdada 11/02/2013 Kathy
ABT A02 Dfg 15/05/2011 Rob
TRG A01 sdasd 16/04/2010 Richard
TRG K05 jksdh 23/04/2012 Mark
KLD KO5 F sd 18/05/2013 Jim
KLD KO5 dsfsd 10/03/2012 James
KLD KO5 sdsd 12/05/2011 Luther
我需要将以下内容作为输出:
Site Det Count CountOfFailures
ABT A01 4 2
ABT A02 3 1
TRG A01 1 0
TRG K05 1 0
KLD KO5 3 1
我知道我可以按站点和Det分组并获得计数,但无法获得失败次数的计数
Select Site,Det, Count(*) AS [Count] from Table1
group by Site,Det order by Count
需要相同的帮助。尝试以下方法:-
Select site,det,
FlagCount = sum(case when FailFlag='F' then 1 else 0 ENd)
from yourTable
group by Site,Det
order by Site
输出
+------+-----+-----------+
| site | det | FlagCount |
+------+-----+-----------+
| ABT | A01 | 2 |
| ABT | A02 | 1 |
| KLD | KO5 | 1 |
| TRG | A01 | 0 |
| TRG | K05 | 0 |
+------+-----+-----------+
你可以试试案例陈述
SELECT Site, Det, COUNT(*) AS [Count], SUM(CASE WHEN FailFlag = 'F' THEN 1 ELSE 0 END) AS CountOfFailures
FROM Table1
GROUP BY Site, Det
像这样的怎么样
Select [Site],
[Det],
Count(*) AS [Count],
SUM(CASE WHEN FailFlag = 'F' THEn 1 ELSE 0 END) [CountFailed]
from Table1
group by [Site],
[Det]
order by [Count]
您需要在where或group by子句中添加case,case FailFlag='F',然后将1或0作为FailFlagNum并计数。谢谢Praveen。这正是我一直在寻找的。这很有效。