2017-08-22 1 views
2

unten ist mein Code, der nicht erfolgreich ausgeführt wird. Irgendwelche Vorschläge würden sehr geschätzt werden. Ich kann keine Fehler beheben. Ich frage mich, ob es sich nur um eine Platzierung handelt.mit wo und Gruppe in einer Unterabfrage

Dies ist die Fehlermeldung erhalte ich: mein Code

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. 

hier:

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

Warum haben Sie diese GROUP BY? Es verursacht einen Fehler und tut nichts. –

+0

Die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer set-Funktion sein. (Immer noch eine Frage, warum Sie die Gruppe haben, obwohl ...) – jarlh

Antwort

1

Sie können MAX() verwenden. Zum Beispiel: MAX(FEE_PROV) gruppieren Aussagen unter SELECT

2

sollten Sie having anstelle von where:

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

Sie alle Spalten aus der SELECT-Liste zu GROUP BY (diese nur die nicht haben eine Aggregation) setzen sollten . In Ihrem Fall - alle von ihnen.

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

Danke, danke, danke! Wo würde ich die Reihenfolge nach Code platzieren, der von nwh_analytics.dbo.KM_CMR_table kommt? – Kimm

+0

Am Ende der Abfrage hinzufügen: ORDER BY a.code –