select CASE-Anweisung basierend auf zwei Tabellen

MS SQL Server 2008R2 Management Studio

Ich bin mit einem SELECT auf zwei Tabellen. Ich werde es vereinfachen zu dem Teil, wo ich Probleme habe. Ich brauche zum ändern der SELECT Ergebnisse in einem bestimmten format für Daten-import. Meine CASE - Anweisung funktioniert gut, bis ich zu dem Punkt, dass ich zu base-die WHEN ... THEN... auf eine andere Spalte der Tabelle

TABLE1
-----------------
name   |  tag   | code
-----------------------
name1  |   N    | 100
name2  |   N    | 100
name3  |   N    | 200
name4  |   Y    | 100
name5  |   N    | 400
name6  |   N    | 700

CODES
-------------------------
code |   desc
-------------------------
100 | string1
200 | string2
300 | string2
400 | string2
700 | string2

SELECT name,
Case CODES.desc
when 'string1' then 'String 1'
when 'string2' then 'String 2'
when 'string3' then 'String 3'
when 'string4' then 'String 4'
END as description
FROM TABLE1
join CODES on TABLE1.code = CODES.code

Diese funktioniert einwandfrei. Das problem ist, wenn TABLE1.tag = Y, dann Beschreibung muss 'Other string' die nicht in der CODES Tabelle

Ich habe versucht, hinzufügen:

Case CODES.desc
.....
when TABLE1.tag = Y then CODES.desc 'Other String'

aber es hat nicht funktioniert.

Sie können nest case-Anweisungen. es ist hässlich, aber machbar. im Grunde das äquivalent von verschachtelten if(if())
Fall, wenn in "Tabelle1".tag = 'Y', dann 'Andere Saiten' else (case-codes.desc-wenn 'string1', dann 'String 1', wenn ... Ende) Ende - weiß nicht, ob müssen Sie die Klammern, aber zumindest hilft es, zu Lesen
Sie brauchen nicht die Klammern, aber Sie brauchen auch nicht Schaden.

InformationsquelleAutor Minott Opdyke | 2015-11-16

Schreibe einen Kommentar