2016-04-20 9 views
-1

Ich versuche, eine Zeichenfolge zurück, wenn bestimmte Bedingungen erfüllt sind, aber die ich in einen Datentyp Problem renne ... LI.num_seats_pur und LI.num_seats_ret sind beide smallint Datentypen ...CAST und CASE in SQL-Anweisung SELECT

hier ist, wo ich bin stecken:

SELECT 
CASE 
    WHEN (LI.num_seats_ret = LI.num_seats_pur) 
    THEN 'RET' 
    ELSE (LI.num_seats_pur - LI.num_seats_ret) 
END as 'Seats' 

FROM T_LINEITEM LI; 

ich verstehe, dass ‚RET‘ ist natürlich kein smallint, aber jede Kombination von CAST ich hier verwenden verursacht noch einen Fehler. Irgendwelche Ideen?

Antwort

2

Wenn Sie einen CASE Ausdruck verwenden und die Rückgabewerte unterschiedliche Datentypen haben, werden sie in den mit dem höheren Wert data type precedence konvertiert. Und da SMALLINT eine höhere Priorität als VARCHAR hat, ist der Rückgabewert des ELSE Teil, wird 'RET'-SMALLINT umgewandelt. Dies wird dann zu einem Konvertierungsfehler vorgehen:

Conversion failed when converting the varchar value 'RET' to data type smallint.

Um das gewünschte Ergebnis zu erzielen, müssen Sie die ELSE Teil VARCHARCAST:

SELECT 
    CASE 
     WHEN (LI.num_seats_ret = LI.num_seats_pur) 
      THEN 'RET' 
     ELSE 
      CAST((LI.num_seats_pur - LI.num_seats_ret) AS VARCHAR(10)) 
    END AS 'Seats' 
FROM T_LINEITEM LI; 
+1

Ah, danke für den Vorrang Klärung ... das ist, was hängten mich auf ... das war der Trick! – amajors