不同计数 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'