2016-07-27 10 views
0

Ich habe eine Abfrage, die eine Reihe von verschiedenen Daten zurückgibt, aber ich möchte, dass es alle Werte nach einer bestimmten Bedingung ersetzt.SQL-Unterabfrage, um alle Werte zu ersetzen

Was ich unten geschrieben habe, gibt mir irgendwie das Ergebnis, das ich will, aber nicht wirklich. Es schafft eine neue Spalte anstatt die andere zu ersetzen:

SELECT 
    CASE 
     WHEN T4.[U_DestType] = '6' 
      THEN (SELECT 
       'Company Limited' AS [ShipToCode] 
      ) 
    END AS [ShipToCode], 
    T2.[ShipToCode], 
    T6.[StreetS], 
    T6.[StreetNoS], 
    T6.[CityS], 
    T6.[ZipCodeS], 
    T6.[CountryS], 
    T5.[LicTradNum], 
    T2.[CardCode], 
    T4.[Phone1], 
    T4.[E_Mail], 
    T4.[U_DestType], 
    CASE 
     WHEN T4.[Country] = 'GB' 
      THEN 'EN' 
     ELSE T4.[Country] 
    END AS [Country], 
    T4.[U_ShortName] 
FROM[...] 

Das Endziel ist alle Spalten mit einigen voreingestellten Werten statt nur wie oben ShipToCode zu ersetzen.

Ich habe versucht, eine EXIST-Unterabfrage nach FROM zu setzen, aber das hat auch nicht funktioniert.

Ist das möglich? Vermutlich vermisse ich etwas sehr Offensichtliches.

Vielen Dank!

Antwort

4

Sie können ein anderes in Ihrem CASE-Ausdruck verwenden, um die beiden „Säulen“ zu kombinieren:

CASE 
    WHEN T4.[U_DestType] = '6' 
     THEN (SELECT 
      'Company Limited' AS [ShipToCode] 
     ) 
    ELSE T2.[ShipToCode] 
END AS [ShipToCode], 

Und übrigens, hast du keine Sub-Select verwenden müssen. Dies würde funktioniert genauso gut und ist leichter zu lesen:

CASE 
    WHEN T4.[U_DestType] = '6' THEN 'Company Limited' 
    ELSE T2.[ShipToCode] 
END AS [ShipToCode], 
+0

Hinweis, keine Notwendigkeit dieses subselect, einfach nur '... dann‚Company Limited‘....' –

+1

Ha! wurde bereits bearbeitet ...;) –

+0

Ich bin ein Dummy, alles scheint jetzt so offensichtlich. Danke noch einmal. – coblenski