2016-12-30 3 views
0

Ich versuche, eine CASE-Anweisung in SQL zu schreiben.Fallanweisung mit Where-Bedingung in SQL

Die DB-Struktur ist wie folgt:

============================================== 
tender_id | file_no | subject 
============================================== 

150001   16/41  Against Shipment 
150005   16/42  Pending 
150008   16/43  Shipment Clause 
1500081  16/43  NULL or Empty 
1500082  16/43  NULL or Empty 
============================================== 

Ich versuche, eine CASE-Anweisung zu schreiben, die den Gegenstand zeigt. Das Kriterium ist, wenn das Thema NULL or EMPTY ist, dann sollte es den Betreff holen, wo das Thema mit dem Kriterium where file_no = file_no eingegeben wird. In diesem Fall sollte tender_id 1500081 und 1500082 das Thema als "Shipment Clause" seit der file_no dieser Matches nehmen.

Kann mir jemand dabei helfen?

+0

Können Sie die komplette SQL-Anweisung zur Verfügung stellen, die fehlschlägt? – soundslikeodd

+0

Wenn Sie es in Form einer SQL-Fiddle ausdrücken, kann es Ihnen helfen, Ihre Frage beantwortet zu bekommen. –

Antwort

0

Sie können dieses Problem lösen mit einem Selbst-Join:

SELECT t1.tender_id, t2.file_no, 
    CASE t1.subject 
    WHEN 'NULL or Empty' THEN t2.subject 
    ELSE t1.subject END AS subject 
FROM YourTableName AS t1 
JOIN YourTableName AS t2 
    ON (t2.file_no = t1.file_no AND t2.subject <> 'Null or Empty'); 

Dies setzt voraus, da nur eine Zeile ist, wo das Thema festgelegt ist, für jede File_Nr.

Update: Ich habe eine SQLFiddle erstellt, um diese Abfrage zu demonstrieren. Dies entspricht dem von Ihnen beschriebenen Problem, so wie ich es verstehe.

+0

Aus irgendeinem Grund funktioniert es nicht. Ich überprüfe den Grund. –

+0

Ich habe die Frage mit dem, was ich versucht habe, aktualisiert. Kannst du mir bitte dabei helfen? –

0

Sqlfiddle here

Ich habe beiden ersten Spalte angenommen werden int Sie es entsprechend Ihrer Datenbank ändern und entsprechend bearbeiten.

Angenommen, Sie immer file_no in der Tabelle haben, werden Sie von file_no immer suchen, die Ihnen das gewünschte Ergebnis

SELECT subject 
FROM [table_name] 
WHERE file_no = (SELECT file_no FROM [table_name] where tender_id = [required_tender_id]) 
AND subject IS NOT NULL;