当另一个字段全为NULL时计算唯一字段

时间:2019-03-01 06:23:21

标签: sql-server

我有一个包含三列的表,其中可以包含重复的行

  1. org-int NULL
  2. id-int NULL
  3. 完整-位NULL

所以我可能会有这样的数据:

org | id | complete
-------------------
1   |  1 | 1
1   |  2 | NULL
1   |  2 | 1
1   |  3 | 1
2   |  3 | 1
2   |  4 | 1
2   |  4 | NULL

我想通过id得到所有不同的org的计数。使用COUNT(DISTINCT id)表达式很容易做到。我现在遇到麻烦的地方是,我还希望统计所有id都不为1的所有不同complete

因此,从上面开始,我想要这个输出:

org | distinct id | distinct incomplete id
------------------------------------------
  1 |   3         |  1
  2 |   2         |  1

因此对于组织2,由于4的id包含NULL值,所以我无法将id 4视为完全完成,因此id 3是完整的,因此结果为1 in distinct incomplete id列。所以我不知道如何填写????以下查询的一部分。

SELECT org, COUNT(DISTINCT id) TotalPeople, ???? IncompletePeople
FROM table
GROUP BY org

3 个答案:

答案 0 :(得分:0)

尝试以下方法

DECLARE @T TABLE
(
    Org INT,
    Id INT,
    Complete BIT
)

INSERT INTO @T
VALUES(1,1,1),(1,2,NULL),(1,2,1),(1,3,1),(2,3,1),(2,4,1),(2,4,NULL)

SELECT
    Org,
    DistinctId = COUNT(DISTINCT Id),
    DistinctIncompleteId = SUM(CASE Complete WHEN 1 THEN 0 ELSE 1 END)
    FROM @T
        GROUP BY Org

答案 1 :(得分:0)

您可以尝试这种方式

Sematic error: DELETE operations cannot have a requestBody

答案 2 :(得分:0)

按“组织”和“完成”将其分组。然后将HAVING complete = 1。希望下面的代码对您有所帮助:

SELECT org, COUNT(id) TotalPeople, complete
FROM table
GROUP BY org,complete
HAVING complete=1 (complete IS NULL *for incomplete*)
相关问题