2016-05-11 14 views
0

Ich erhalte den Fehler: Ein Ausdruck von nicht-booleschen Typ in einem Kontext angegeben, in dem eine Bedingung erwartet wird, in der Nähe von 'THEN'.Wie kann ich Min in einer case-Anweisung verwenden

Wie kann ich das beheben?

hier ist der sql.

Select 
HEADER_ID, 
CASE 
    WHEN MIN(OPPTY_HEADER_ID) THEN STATCD='SP66'ELSE STATCD AS STACD, 
TYPE, NL_IND 
FROM nl_dups_load 
+0

Was möchten Sie tun? Und ist das eine Art von RDBMS-Problem? – Strawberry

+0

Ich hätte mehr Infos enthalten sollen. Diese Tabelle ist eine Tabelle mit doppelten header_ids. Jede header_id hat und oppty_header_id. also gibt es 2 oppty_header_id für jede header_id. also nehme ich die min oppty_header_id per header id und ändere die statcd. –

+1

Bitte bearbeiten Sie Ihre Frage, um die Informationen in Ihren Kommentar aufzunehmen. –

Antwort

0

Sie benötigen ein Wahr/Falsch-Ergebnis in der ersten Klausel Ihrer CASE WHEN Erklärung für sie zu funktionieren.

Ändern es zu so etwas wie:

Select HEADER_ID 
    , CASE WHEN MIN(OPPTY_HEADER_ID) > 0 THEN STATCD = 'SP66' ELSE STATCD END AS STACD 
    , TYPE 
    , NL_IND 
FROM nl_dups_load 

Will ‚fix‘ diesen bestimmten Fehler, aber das Ergebnis kann nicht sein, was Sie suchen. Außerdem glaube ich nicht, dass Sie eine Aggregatfunktion (d. H. "MIN") in einer CASE-Anweisung in diesem Format verwenden können, sodass Sie möglicherweise auf einen anderen Fehler stoßen, wenn Sie den ursprünglichen Fehler beheben.

Sie müssen Ihre Frage und das gewünschte SQL-Ergebnis besser erklären.

EDIT:

I should have included more info. This table is a table of duplicate header_ids. Each header_id has and oppty_header_id. so there are 2 oppty_header_id to each header_id. so I wan to take the min oppty_header_id per header id and change its statcd.

Klingt wie Sie so etwas wie die folgenden (mit vielen Annahmen gemacht werden) wollen. Testen Sie dies, bevor Sie es verwenden, da UPDATE-Abfragen nicht einfach rückgängig gemacht werden können.

UPDATE A 
SET A.STATCD = 'SP66' 
FROM nl_dups_load AS A 
INNER JOIN (
    SELECT B.HEADER_ID, MIN(OPPTY_HEADER_ID) AS MinOppty 
    FROM nl_dups_load AS B GROUP BY B.HEADER_ID 
) AS C ON A.HEADER_ID = C.HEADER_ID AND A.OPPTY_HEADER_ID = C.MinOppty 

Obwohl, ich würde wirklich einige Beispiele Zeilen Ihrer Quelltabelle und ein Beispiel für die gleichen Zeilen mit den Änderungen in einer Ergebnistabelle sehen muß, um sicher zu wissen, dass das ist, was du bist zu tun.

Verwandte Themen