2016-07-28 15 views
1

Wenn ich meine Transact-SQL-CodeIF-Anweisung mit Transact SQL

IF (SELECT model_id FROM request_unit where request_id = '4357') IS NULL 
    SELECT part_id FROM request_unit WHERE request_id = '4357' 
ELSE 
    SELECT model_id FROM request_unit where request_id = '4357' 

ich die folgende Fehlermeldung aus:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Antwort

5

Wie wäre es nur COALESCE() mit?

SELECT COALESCE(model_id, part_id) 
FROM request_unit 
WHERE request_id = '4357'; 

Die IF wird nicht benötigt.

Der Fehler selbst scheint ziemlich selbsterklärend. Es gibt mehr als eine Zeile in request_unit wo die request_id ist 4357.

+0

Es funktioniert gut danke, aber der Header der Ergebnistabelle zeigt nicht den Namen der Spalte (Model_id oder part_id). Es zeigt 'No column name' – Ces1919

+1

@NaderLaroussi nur alias it, wie (model_id ModelID, part_id PartID) –

1

Try this ...

Es bedeutet, es gibt mehr model_id für die request_id = '4357'

IF Not Exists (SELECT model_id FROM request_unit where request_id = '4357') 
    SELECT part_id FROM request_unit WHERE request_id = '4357' 
ELSE 
    SELECT model_id FROM request_unit where request_id = '4357' 
0
IF (SELECT top 1 model_id FROM request_unit where request_id = '4357') IS NULL 
    SELECT part_id FROM request_unit WHERE request_id = '4357' 
ELSE 
    SELECT model_id FROM request_unit where request_id = '4357' 

Auch dies kann sein verwendet, aber die @ Gordon Lioff's Antwort ist bevorzugt

0

Zusammen mit @ GordonLinoff's Antwort können Sie schreibe folgendes, um den Spaltennamen zu erhalten:

SELECT COALESCE(model_id, part_id) as 'YOURCOLUMNNAME' 
FROM request_unit 
WHERE request_id = '4357'; 
0

Du kannst es tun wie;

COALESCE

SELECT COALESCE(model_id, part_id) FROM request_unit WHERE request_id = '4357' 

ISNULL

SELECT ISNULL(model_id, part_id) FROM request_unit WHERE request_id = '4357' 

CASE WHEN

SELECT CASE WHEN model_id IS NULL THEN part_id ELSE model_id END FROM request_unit WHERE request_id = '4357' 

IIFStarting with 2012

SELECT IIF(model_id IS NULL, part_id, model_id) THEN part_id ELSE model_id END FROM request_unit WHERE request_id = '4357'