2017-12-20 25 views
0

このケースを使用してデータを表示すると、wheregroup byと表示されます。サンプルは18/12/2017です。グループでデータを表示する方法とSQL Serverのどこに?

SELECT 
    PROID, 
    MAX(COUNT_NUMBER) AS COUNT_NUMBER_OLD, 
    CONVERT(CHAR(10), DATETIME_INPUT, 101) AS PreDate 
FROM 
    TABLE_A 
WHERE 
    CONVERT(VARCHAR(2), DATETIME_INPUT, 108) BETWEEN '18' AND '23' 
    AND CONVERT(CHAR(10), DATETIME_INPUT, 103) = '18/12/2017' 
GROUP BY 
    PROID, CONVERT(CHAR(10), DATETIME_INPUT, 101); 

結果は次のとおりです。それは、通常の作業だが、私はどこ条件でデータを持っていない場合は、データを表示したい

PROID  COUNT_NUMBER_OLD  PreDate 
------------------------------------------- 
01  1063     12/18/2017 
02  365     12/18/2017 
03  845     12/18/2017 

CONVERT(CHAR(10), DATETIME_INPUT, 103) = '17/12/2017'

PROID  COUNT_NUMBER_OLD  PreDate 
------------------------------------------ 
01  0      12/17/2017 
02  0      12/17/2017 
03  0      12/17/2017 

私は

(CASE 
    WHEN COUNT_NUMBER IS NULL 
     THEN 0 
     ELSE MAX(COUNT_NUMBER) 
END) AS COUNT_NUMBER_OLD 

と試みるが、私はこのエラーを取得する:あなたは、サブクエリを使用して、グループごとに最大count_numberを得ることができ

Column 'TABLE_A.COUNT_NUMBER' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+0

*私は条件が*のデータがない場合、データを表示したいと思いますか? –

+0

正確には、条件がデータを持たない場合は、データを '' '0''と表示したい –

答えて

0

をたとえば、 ISNULL操作を実行します。

SELECT X.PROID, 
     ISNULL(X.COUNT_NUMBER,0) AS COUNT_NUMBER_OLD, 
     X.PreDate 
FROM 
(SELECT PROID, 
     ROW_NUMBER() OVER (PARTITION BY PROID,CONVERT(CHAR(10), DATETIME_INPUT, 101) ORDER BY COUNT_NUMBER DESC) AS RN, 
     CONVERT(CHAR(10), DATETIME_INPUT, 101) AS PreDate, 
     COUNT_NUMBER 
FROM TABLE_A 
WHERE CONVERT(VARCHAR(2), DATETIME_INPUT, 108) BETWEEN '18' AND '23' 
     AND CONVERT(CHAR(10), DATETIME_INPUT, 103) = '18/12/2017') X 
WHERE X.RN=1 
+0

これはうまくいかず、私は' '' PROID COUNT_NUMBER_OLDとして表示したいPreDate ------------ ------------------------------ 01 0 12/17/2017 02 0 12/17/2017 03 0 12/17/2017''' –

+0

@BrianCrist私のクエリの出力は?サンプルデータを追加していないので、出力を確認することはできません。 –

+0

結果が表示されません。データがない場合は0を表示します。 –

0

あなたの列がNULL値を持つ可能性があります。

デフォルトでは、関数MAXとMINは、データの評価でNULLをカウントしません。 COUNT_NUMBER列にNULL値が含まれる場合、MAXとMINは両方ともその値を無視します。

このソリューションをお試しください。

SELECT PROID, 
     MAX(COALESCE(COUNT_NUMBER,0)) AS COUNT_NUMBER_OLD, 
     CONVERT(CHAR(10), DATETIME_INPUT, 101) AS PreDate 
FROM TABLE_A 
WHERE CONVERT(VARCHAR(2), DATETIME_INPUT, 108) BETWEEN '18' AND '23' 
AND CONVERT(CHAR(10), DATETIME_INPUT, 103) = '17/12/2017' 
GROUP BY PROID, 
     CONVERT(CHAR(10), DATETIME_INPUT, 101); 
+0

これはうまくいかず、行が表示されません。 '' 'PROID COUNT_NUMBER_OLD前の日付を表示します。 ----------------------------- ------------- 01 0 12/17/2017 02 0 12/17/2017 03 0 12/17/2017''' –

+0

列count_numberにNULL値が含まれていますか?基礎となるテーブルの電子メールを提供できますか? –

関連する問題