2017-06-07 2 views
0

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

+0

'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

+0

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 –

+0

'IIF'! =' IF'. Und die Frage, die Sie verbunden haben, hätte diese Unterscheidung nicht erwähnt, da 'IIF' nicht bis 2012 existierte. –

Antwort

1

Verwenden Case als nächste Demo: -

declare @MyTable table (id int identity, name varchar(10), name_2 varchar(10)) 

insert into @MyTable values ('T001',NULL),('T001T','T001X'),('T002',' ') 

select id, case 
     when name_2 is null or name_2 = '' or name_2 = ' ' 
     then name 
     else name_2 
     end The_name 
from @MyTable 

Ergebnis: -

1 T001 
2 T001X 
3 T002 
+0

Ich habe überprüft, dass Ihr Code in einer Ansicht funktioniert. –

+0

@USeptim - wie Sie sollten "IIF" Version. Es wäre gut gewesen, wenn deine Frage erwähnt hätte, warum es nicht funktionierte, z. Fehlermeldungen). –

0

Es gibt keinen offensichtlichen Grund, warum Sie, dass in einer Ansicht -oder eine Funktion für diese Angelegenheit nicht tun kann. Einige unserer Ansichten sind ziemlich haarige Beats mit vielen solcher bedingten Anweisungen usw. Die einzige Voraussetzung ist, dass eine abgeleitete Spalte einen Alias ​​erhalten muss.

Verwandte Themen