Tsql T-SQL对不同行进行计数,以将零作为唯一行
我有以下测试脚本:Tsql T-SQL对不同行进行计数,以将零作为唯一行,tsql,Tsql,我有以下测试脚本: DECLARE @Test TABLE (number INT) INSERT INTO @Test VALUES (6) INSERT INTO @Test VALUES (6) INSERT INTO @Test VALUES (6) INSERT INTO @Test VALUES (2) INSERT INTO @Test VALUES (2) INSERT INTO @Test VALUES (0) INSERT INTO @Test VALUES (0) INSE
DECLARE @Test TABLE (number INT)
INSERT INTO @Test VALUES (6)
INSERT INTO @Test VALUES (6)
INSERT INTO @Test VALUES (6)
INSERT INTO @Test VALUES (2)
INSERT INTO @Test VALUES (2)
INSERT INTO @Test VALUES (0)
INSERT INTO @Test VALUES (0)
INSERT INTO @Test VALUES (0)
INSERT INTO @Test VALUES (0) INSERT INTO @Test VALUES (0)
SELECT * FROM @Test
SELECT count(*) FROM @Test GROUP BY number
结果
number
6
6
6
2
2
0
0
0
0
0
(No column name)
5
2
3
Number
2
6
0
0
0
0
0
我试图得到一个7的计数,即6和2是不同的,0是唯一的?不太清楚您为什么想要这样做,但您可以分别执行这两个查询并执行一个UNION ALL来合并结果 测试数据
CREATE TABLE #TestData (Number int)
INSERT INTO #TestData (Number)
VALUES
(6), (6), (6), (2), (2), (0), (0), (0), (0), (0)
质疑
如果您想返回数字7,那么只需将其包装在一个外部查询中,如下所示
SELECT
COUNT(1) FinalCount
FROM
(
SELECT DISTINCT
Number
FROM #TestData
WHERE Number <> 0
UNION ALL
SELECT
Number
FROM #TestData
WHERE Number = 0
) a
不太清楚为什么要这样做,但可以分别执行这两个查询并执行UNION ALL以合并结果 测试数据
CREATE TABLE #TestData (Number int)
INSERT INTO #TestData (Number)
VALUES
(6), (6), (6), (2), (2), (0), (0), (0), (0), (0)
质疑
如果您想返回数字7,那么只需将其包装在一个外部查询中,如下所示
SELECT
COUNT(1) FinalCount
FROM
(
SELECT DISTINCT
Number
FROM #TestData
WHERE Number <> 0
UNION ALL
SELECT
Number
FROM #TestData
WHERE Number = 0
) a
试试这个:
DECLARE @Test TABLE (number INT)
INSERT INTO @Test VALUES (6), (6), (6), (2), (2), (0), (0), (0), (0) ,(0)
SELECT COUNT(DISTINCT NewNumber)
FROM (SELECT number,
(CASE WHEN number = 0 THEN ROW_NUMBER() OVER(ORDER BY number) * RAND()
ELSE number END) AS NewNumber
FROM @Test) AS T
输出结果:
7
如果您将按[number]添加分组,您将收到:
number cnt
0 5
2 1
6 1
试试这个:
DECLARE @Test TABLE (number INT)
INSERT INTO @Test VALUES (6), (6), (6), (2), (2), (0), (0), (0), (0) ,(0)
SELECT COUNT(DISTINCT NewNumber)
FROM (SELECT number,
(CASE WHEN number = 0 THEN ROW_NUMBER() OVER(ORDER BY number) * RAND()
ELSE number END) AS NewNumber
FROM @Test) AS T
输出结果:
7
如果您将按[number]
添加分组,您将收到:
number cnt
0 5
2 1
6 1
我想到的最简单的方法是:
SELECT COUNT(DISTINCT NULLIF(Number, 0)) + SUM(CASE WHEN Number = 0 THEN 1 END)
FROM @Test
使忽略的数字等于0
,只负责计算每个数字一次,而与计算0
记录的数量。我想到的最简单的方法是:
SELECT COUNT(DISTINCT NULLIF(Number, 0)) + SUM(CASE WHEN Number = 0 THEN 1 END)
FROM @Test
使忽略的数字等于0
,只负责对每个数字进行一次计数,而与一起计算0
记录的数量。您为什么希望得到该结果?请您解释一下“尝试获得7的计数,即6和2的计数不同,0的计数唯一”?提供测试脚本的方法。但是,请求的结果不清楚。对不起,是的,我想将6计数为1,将2计数为1,将0计数为5。因此,包含零的每一行都被归类为唯一的。所以我的最终结果将是7。你为什么想要这个结果?你能解释一下“试图得到7的计数,即6和2是不同的,0是唯一的”?提供测试脚本的方法。但是,请求的结果不清楚。对不起,是的,我想将6计数为1,将2计数为1,将0计数为5。因此,包含零的每一行都被归类为唯一的。所以我的最终结果只有7。