如何在Count函数中使用where子句

时间:2015-06-24 09:48:02

标签: sql sql-server-2008

我在表格中有以下数据

Country State RequestStatus
India   MP        0
India  MP         1
Usa    At         0
Usa    At          0 

如何在MSSql查询中分组国家和州的所有已完成,待处理和总请求。

0: Pendint
1: Complete

输出应该是下面的

Country State Total Pending Complete
India    MP    2     1        1
USA      At    2     2        0

3 个答案:

答案 0 :(得分:2)

SELECT Country,State , COUNT(* ) AS Total 
,SUM(CASE WHEN RequestStatus = 0 THEN 1 ELSE 0 END ) AS Pending 
,SUM(CASE WHEN RequestStatus = 1 THEN 1 ELSE 0 END ) AS Complete 
FROM @Test T 
GROUP BY Country,State

答案 1 :(得分:1)

使用此:

select country, [state], 
count(*) as Total, 
sum(case when requeststatus = 0 then 1 else 0 end) as Pending, 
sum(case when requeststatus = 1 then 1 else 0 end) as Complete
from tbl
group by country, [state]

我们首先按国家和州分组以获取汇总数据。然后,为了根据特定条件计算总数,我们使用case构造来过滤掉匹配的记录。例如如果我们只想获得待处理的请求,我们只会在requeststatus = 0时递增计数器。

Demo

答案 2 :(得分:0)

您可以使用CREATE TABLE #yourTable(Country nvarchar(10), State nvarchar(5), RequestStatus bit) INSERT INTO #yourTable(Country, State, RequestStatus) VALUES(N'India', N'MP', 0), (N'India', N'MP', 1) SELECT * FROM #yourTable PIVOT ( COUNT(State) FOR RequestStatus IN([0],[1]) ) as PVT DROP TABLE #yourTable 作为示例。

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.tags.contains(tag) ? (ctx.op = \"none\") : ctx._source.tags += tag"
    "params" : {
        "tag" : "blue"
    }
}'

但这主要取决于您的预期结果。也许你想要通过RequestStatus计算MP和组ID。但我不确定,因为你没有为此提供示例输出。