不同计数 SQL
Distinct Count SQL
我试着在这个论坛上搜索答案,但找不到完全符合我的困境的答案。
我有一个可以处于不同状态的声明列表。我想要一个明确的状态为开放的声明计数。下面的示例详细介绍了三列;索赔、索赔行和状态
Claim | ClaimLine | Status
------+-----------+--------
1 | 1 | Open
1 | 2 | Open
1 | 3 | Open
2 | 1 | Enroute
2 | 2 | Enroute
3 | 1 | Closed
4 | 1 | Open
5 | 1 | Open
5 | 2 | Open
5 | 3 | Open
期望的输出:
Open
3
您需要使用带有 DISTINCT 参数的 COUNT() 函数。
所以它会是这样的:
SELECT COUNT(DISTINCT Status) FROM
(SELECT * FROM table_name
GROUP BY Claim)
WHERE Status = 'Open'
GROUP BY Status
应该这样做:
示例数据:
CREATE TABLE #temp (Claim int , Claim_Line int , Status VARCHAR(20))
INSERT INTO #temp
VALUES
(1 ,1 ,'Open'),
(1 ,2 ,'Open'),
(1 ,3 ,'Open'),
(2 ,1 ,'En-route'),
(2 ,2 ,'En-route'),
(3 ,1 ,'Closed'),
(4 ,1 ,'Open'),
(5 ,1 ,'Open'),
(5 ,2 ,'Open'),
(5 ,3 ,'Open')
查询:
SELECT Status, COUNT(DISTINCT Claim) FROM #temp
WHERE Status = 'Open'
GROUP BY Status
结果:
像这样:
SELECT Status, COUNT(1) as Count FROM Claim
WHERE Status = 'Open' GROUP BY Status
这样就不用分组了,下面这个例子的简化版:
select count(distinct claim),'Open' from (
select 1 as Claim, 1 as Claim_Line, 'Open' as Status
union all
select 1, 2, 'Open'
union all
select 1, 3, 'Open'
union all
select 2, 1, 'En-route'
union all
select 2, 2, 'En-route'
union all
select 3, 1, 'Closed'
union all
select 4, 1, 'Open'
union all
select 5, 1, 'Open'
union all
select 5, 2, 'Open'
union all
select 5, 3, 'Open')sunquery where status = 'Open'
简化版:
select count(distinct claim),'Open' from Claims
where status = 'Open'
我试着在这个论坛上搜索答案,但找不到完全符合我的困境的答案。
我有一个可以处于不同状态的声明列表。我想要一个明确的状态为开放的声明计数。下面的示例详细介绍了三列;索赔、索赔行和状态
Claim | ClaimLine | Status
------+-----------+--------
1 | 1 | Open
1 | 2 | Open
1 | 3 | Open
2 | 1 | Enroute
2 | 2 | Enroute
3 | 1 | Closed
4 | 1 | Open
5 | 1 | Open
5 | 2 | Open
5 | 3 | Open
期望的输出:
Open
3
您需要使用带有 DISTINCT 参数的 COUNT() 函数。
所以它会是这样的:
SELECT COUNT(DISTINCT Status) FROM
(SELECT * FROM table_name
GROUP BY Claim)
WHERE Status = 'Open'
GROUP BY Status
应该这样做:
示例数据:
CREATE TABLE #temp (Claim int , Claim_Line int , Status VARCHAR(20))
INSERT INTO #temp
VALUES
(1 ,1 ,'Open'),
(1 ,2 ,'Open'),
(1 ,3 ,'Open'),
(2 ,1 ,'En-route'),
(2 ,2 ,'En-route'),
(3 ,1 ,'Closed'),
(4 ,1 ,'Open'),
(5 ,1 ,'Open'),
(5 ,2 ,'Open'),
(5 ,3 ,'Open')
查询:
SELECT Status, COUNT(DISTINCT Claim) FROM #temp
WHERE Status = 'Open'
GROUP BY Status
结果:
像这样:
SELECT Status, COUNT(1) as Count FROM Claim
WHERE Status = 'Open' GROUP BY Status
这样就不用分组了,下面这个例子的简化版:
select count(distinct claim),'Open' from (
select 1 as Claim, 1 as Claim_Line, 'Open' as Status
union all
select 1, 2, 'Open'
union all
select 1, 3, 'Open'
union all
select 2, 1, 'En-route'
union all
select 2, 2, 'En-route'
union all
select 3, 1, 'Closed'
union all
select 4, 1, 'Open'
union all
select 5, 1, 'Open'
union all
select 5, 2, 'Open'
union all
select 5, 3, 'Open')sunquery where status = 'Open'
简化版:
select count(distinct claim),'Open' from Claims
where status = 'Open'