2017-08-22 7 views
2

の下で使用すると、私のコードは正常に実行されません。どんな提案も大歓迎です。私はトラブルシューティングすることができません、私はそれが配置されているのだろうか?whereとgroupをサブクエリ

これは私がエラーメッセージである:ここで

Msg 8120, Level 16, State 1, Line 7 
Column 'prod.dbo.prov_fee_schedule.FEE_PROV' is invalid in the select >list because it is not contained in either an aggregate function or the GROUP BY clause. 

私のコードです:

SELECT * 
FROM nwh_analytics.dbo.km_cmr_table a 
     LEFT JOIN (SELECT CASE 
          WHEN location IN ('03', '05', '11', '12', 
               '15', '20', '25', '32', 
               '41', '42', '49', '50', 
               '60', '71', '72', '81', '99') 
         THEN 
          'Non Facility' 
          WHEN location = '*' THEN 'Facility' 
          ELSE 'error' 
         END AS LOC, 
         fee_prov, 
         fee_cpt, 
         cpt_modifier, 
         rate_a, 
         rate_b, 
         rate_c, 
         pct 
        FROM prod.dbo.prov_fee_schedule 
        WHERE to_date >= '2017-01-01' 
         AND fee_prov IN ('TUPP00') 
        GROUP BY CASE 
           WHEN location IN ('03', '05', '11', '12', 
               '15', '20', '25', '32', 
               '41', '42', '49', '50', 
               '60', '71', '72', '81', '99') 
       THEN 
           'Non Facility' 
           WHEN location = '*' THEN 'Facility' 
           ELSE 'error' 
          END) b 
       ON a.code = b.fee_cpt 
+1

なぜGROUP BYをお持ちですか?それは何もしていないというエラーを引き起こしています。 –

+0

一般的なGROUP BYルールは次のように言います。GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 (まだあなたがグループを持っている理由はまだありますが...) – jarlh

答えて

1

あなたはMAX()を使用することができます。たとえば:SELECT

2

下のグループ文にMAX(FEE_PROV)あなたはwhereの代わりにhavingを使用する必要があります。

group by ... 
having TO_DATE >= '2017-01-01' 
     and FEE_PROV in ('TUPP00') 
2

あなたはGROUP BY(のみこれらの凝集を持たない)にSELECTリストからすべての列を置く必要があります。あなたの場合 - それらのすべて。

SELECT * FROM nwh_analytics.dbo.km_cmr_table a 
     LEFT JOIN (SELECT CASE 
          WHEN location IN ('03', '05', '11', '12', 
               '15', '20', '25', '32', 
               '41', '42', '49', '50', 
               '60', '71', '72', '81', '99') 
         THEN 
          'Non Facility' 
          WHEN location = '*' THEN 'Facility' 
          ELSE 'error' 
         END AS LOC, 
         fee_prov, 
         fee_cpt, 
         cpt_modifier, 
         rate_a, 
         rate_b, 
         rate_c, 
         pct 
        FROM prod.dbo.prov_fee_schedule 
        WHERE to_date >= '2017-01-01' 
         AND fee_prov IN ('TUPP00') 
        GROUP BY CASE 
           WHEN location IN ('03', '05', '11', '12', 
               '15', '20', '25', '32', 
               '41', '42', '49', '50', 
               '60', '71', '72', '81', '99') 
       THEN 
           'Non Facility' 
           WHEN location = '*' THEN 'Facility' 
           ELSE 'error' 
          END, 
         fee_prov, 
         fee_cpt, 
         cpt_modifier, 
         rate_a, 
         rate_b, 
         rate_c, 
         pct 
      ) b 
       ON a.code = b.fee_cpt 
+0

ありがとう、ありがとう、ありがとう! nwh_analytics.dbo.KM_CMR_tableから来るコードで注文するのはどこですか? – Kimm

+0

クエリの末尾に: ORDER BY a.code –

関連する問題