2016-06-27 4 views
0

としてゼロを含めるために個別の行の数を数えるI以下のテストスクリプトがあります。T-SQLユニーク

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 

私はのための明確なIE 7のカウント数を、取得しようとしているが6と2とゼロのためのユニーク?

+0

なぜあなたはその結果を望みますか? –

+0

「7の数を取得しようとしています。つまり、6と2は区別され、0は一意です」と説明してください。 – TheGameiswar

+0

テストスクリプトを提供する方法。しかし、要求された結果は明確ではない。 –

答えて

2

私が思いついた最も簡単な方法はこれです:NULLIFCOUNT0に等しい数字を無視します

SELECT COUNT(DISTINCT NULLIF(Number, 0)) + SUM(CASE WHEN Number = 0 THEN 1 END) 
FROM @Test 

DISTINCTは一度だけ、各数をカウントするための責任がある、とSUMCASEは、0レコードの数を計算しています。

0

なぜこれを必要としているのかわからないが、両方のクエリを別々に実行し、UNION ALLを実行して結果を結合することができます。

テストデータ

CREATE TABLE #TestData (Number int) 
INSERT INTO #TestData (Number) 
VALUES 
(6), (6), (6), (2), (2), (0), (0), (0), (0), (0) 

クエリ

SELECT DISTINCT 
Number 
FROM #TestData 
WHERE Number <> 0 
UNION ALL 
SELECT 
Number 
FROM #TestData 
WHERE Number = 0 

結果

Number 
2 
6 
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 

結果

FinalCount 
7 
0

この試してください:あなたが受け取ることになりますGROUP BY [number]追加する場合

7 

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 

出力結果を

number cnt 
0  5 
2  1 
6  1