2017-03-06 28 views
0

私はテーブルを作成し、いくつかのレコードを挿入しました。SQlサーバーの四分位からヌル値をエスケープ

今私は四分位

SELECT *, 
    NTILE(4) OVER (ORDER BY val) As Q 
FROM #t; 

を見つけるために、スクリプトを実行していたとき、私は値を取得しています、私は「ヌル」の記録をしたくないし、したくない

ID val Q 
--------- 
1 NULL 1 
2 NULL 1 
3 NULL 1 
4 5 2 
5 7 2 
6 8 2 
7 9 3 
8 9 3 
9 11 4 
10 12 4 

として

CREATE TABLE #t 
    (
    ID INT IDENTITY(1,1) PRIMARY KEY, 
    val INT NULL 
    ); 

-- INSERT 10 values: 3 NULL, 7 integers 
    INSERT INTO #t SELECT NULL; 
    INSERT INTO #t SELECT NULL; 
    INSERT INTO #t SELECT NULL; 
    INSERT INTO #t SELECT 5; 
    INSERT INTO #t SELECT 7; 
    INSERT INTO #t SELECT 8; 
    INSERT INTO #t SELECT 9; 
    INSERT INTO #t SELECT 9; 
    INSERT INTO #t SELECT 11; 
    INSERT INTO #t SELECT 12; 

"Where"句を使用します。 私はそれはあなたがNTILE()値のNULLをお勧めしますし、計算の値を無視することを私を打つこの

ID val Q 
--------- 
4 5 1 
5 7 1 
6 8 2 
7 9 2 
8 9 3 
9 11 3 
10 12 4 
+0

まあ、* *あなたは何をしたいですか? 'NULL'値をフィルタリングすることはかなり賢明です。 –

+0

selectステートメントでcaseを使用してみてください。 –

+0

更新された結果を参照してください –

答えて

0

のようになりたいです。おそらくもっと単純に、

SELECT t.*, 
     (CASE WHEN val IS NOT NULL 
      THEN NTILE(4) OVER (PARTITION BY (CASE WHEN val IS NOT NULL THEN 'NOTNULL' ELSE 'NULL' END) 
           ORDER BY val 
           ) 
     END) as Q 
FROM #t t; 

をか:あなたは行って、これを取得することができます

SELECT id, val, NTILE(4) OVER (ORDER BY val) As Q 
FROM #t t 
WHERE val IS NOT NULL 
UNION ALL 
SELECT id, val, NULL as q 
FROM #t t 
WHERE val IS NULL; 
+0

ありがとう@ gordon-linoff。この解決策が働いた。 –

関連する問題