2009-06-26 7 views
1

Ich habe eine Abfrage bekam, die ein bisschen wie folgt aussieht:Conditionals in Transact-SQL-select Spalte listet

select 
records.id, 
contacts.name + ' (' + contacts.organization + ')' as contact, 
from records 
left join contacts on records.contact = contacts.contactid 

Problem ist - contacts.organization häufig leer ist, und ich Kontakte wie "John Smith()" . Gibt es eine Möglichkeit, die Organisation nur zu verketten, wenn sie nicht leer ist?

Antwort

2

eine CASE-Anweisung

SELECT 
records.id, 
CASE contacts.organization 
    WHEN '' THEN contacts.name 
    ELSE contacts.name + ' (' + contacts.organization + ')' 
END as Contact 
FROM records 
LEFT JOIN contacts ON records.contact = contacts.contactid 

Verwendung Sie können es ändern, auch für NULL-Werte zu überprüfen, aber ich glaube nicht, dass Sie diese Frage, denn wenn Sie eine NULL in Ihrem contacts.organization hatte, das gesamte Ergebnis Das Feld wäre null anstatt leer.

+0

Ack ... schlag mich dazu. Ich kann heute nicht schnell genug tippen. –

+0

Funktioniert gut - danke! –

1

Nicht sicher, ob dies der beste Weg ist, es zu tun:

CASE contacts.organization 
WHEN '' THEN '' 
ELSE '(' + contacts.organzation + ')' END 
1

eine CASE verwenden, wie CASE WHEN contacts.organization nicht null then '(' + Co + ')' else ''

Ende
0

Sie müssen immer nulls erwarten, wegen Ihrer äußeren Verknüpfung:

select 
records.id, 
contacts.name + CASE WHEN contacts.organization IS NULL OR contacts.organization='' THEN '' ELSE ' (' + contacts.organization + ')' END as contact, 
from records 
left join contacts on records.contact = contacts.contactid 
0

Wenn Sie mit NULL zu tun sind Werte gibt es einige Funktionen, die in ihnen sind spezialisiert, die wissenswert sind.

NULLIF() könnte derjenige sein, der Sie suchen. Es benötigt grundsätzlich zwei Parameter. Es gibt den ersten Parameter zurück, es sei denn, es ist NULL, andernfalls gibt es den zweiten Parameter zurück.

Hier ist, was ich Ihren Code nähern wäre:

select 
records.id, 
contacts.name + ISNULL(' (' + contacts.organization + ')', '') as contact, 
from records 
left join contacts on records.contact = contacts.contactid 

meisten NULL-bezogene Funktionen können durch eine größere CASE-Anweisung ersetzt werden. CASE ist dein allgemeineres Werkzeug. Wenn Sie jedoch bestimmte Funktionen verwenden, wird Ihr Code sauberer oder zumindest knapper.