ich einen Blick aus der Tabelle T1 mit zwei Feldern erstellt werden soll, ist eine die ID und der andere seinen Wert aus den Bereichen Namen oder Name_aux nehmen. Die Logik besteht darin, den Wert von Name_2 zu übernehmen, es sei denn, es ist NULL, leer ('') oder Leerzeichen. Ich kann keinen Wechsel in den Tisch machen.Kann ich Komplex in einer Ansicht verwenden?
T1 hat eine Struktur wie folgt aus:
|ID|Name |Name_2|
|1 |T001 | |
|2 |T001T|T001X |
|3 |T002 | |
ich die IIF
Funktion verwendet haben, aber obwohl ich es von einem Skript verwenden, kann ich kann es nicht in einer Abfrage funktioniert:
SELECT ID, IIF((([Name_2] = '') OR ([Name_2] = ' ') OR ([Name_2] IS NULL)),
[Name], [Name_2]) AS NAME
FROM dbo.T1
I habe in diesem thread gelesen, dass es nicht möglich ist, komplexe IF-Logik in einer Ansicht zu verwenden, aber da es vor einigen Jahren ist, möchte ich noch einmal fragen.
Wenn es keine andere Lösung gibt, kann ich eine benutzerdefinierte Funktion tun, die zwei Zeichenfolgen empfängt und eine zurückgibt, aber das möchte ich vermeiden.
Danke
'COALESCE()' könnte hier eine bessere Wahl sein. 'COALESCE (Name_2, [Name])' Wenn Ihre Daten nicht sauber sind und Sie tatsächlich Nicht-Null, aber leere Werte haben, die Sie testen müssen, verwenden Sie 'CASE' wie' CASE WANN trim ([Name_2]) = '' ODER [Name_2] IST NULL DANN [Name] ELSE [Name_2] END als [Name] ' – JNevill
Dies ist keine" komplizierte IF-Logik ", dies könnte einfach als CASE-Anweisung in der Ansicht ausgedrückt werden. Wo Sie Probleme haben würden, wäre es, wenn Sie mit der Einführung von Aggregat-IF-Logik oder etwas wirklich Komplexem beginnen würden. Ihre Aussage wäre CASE WHEN Name_2 = '' ODER Name_2 = '' ODER Name_2 IST NULL DANN Name ELSE Name_2 ENDE ALS NAME –
'IIF'! =' IF'. Und die Frage, die Sie verbunden haben, hätte diese Unterscheidung nicht erwähnt, da 'IIF' nicht bis 2012 existierte. –