Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-SQL对不同行进行计数,以将零作为唯一行_Tsql - Fatal编程技术网

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。