sql-server, IF-statement in SQL Query

Ich habe Probleme mit der Verwendung einer IF statement in dieser SQL-server-Abfrage.

Was ich möchte:

Wenn salesHeader.[Ship-to Name] nicht null ist, muss ich diesen AS DeliveryName zurückgeben, wenn es null ist, gib etwas anderes zurück.

Gibt es eine Möglichkeit, dies mit einer if statement in einer Abfrage zu tun?

 SELECT poHeader.No_ AS PONumber, poHeader.[Buy-from Vendor No_] AS VendorNumber, poHeader.[Document Date] AS DocDate, salesHeader.GiftMessage, salesHeader.[Delivery Comment] AS DeliveryComment, salesHeader.[Shipment Date] AS DeliveryDate, IF salesHeader.[Ship-to Name] IS NOT NULL salesHeader.[Ship-to Name] AS DeliveryName ELSE poHeader.[Ship-to Name] AS DeliveryName END FROM dbo.[Crocus Live$Purch_ orders for e-mailing] AS poForEmailing LEFT OUTER JOIN dbo.[Crocus Live$Purchase Header] AS poHeader ON poForEmailing.No_ = poHeader.No_ INNER JOIN dbo.[Crocus Live$Vendor] AS vendor ON poHeader.[Buy-from Vendor No_] = vendor.No_ LEFT OUTER JOIN dbo.[Crocus Live$Sales Header] AS salesHeader ON salesHeader.No_ = dbo.fnGetSalesOrderNumber(poHeader.No_) 

Oder verwenden Sie COALESCE …

 SELECT COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName 

COALESCE gibt den ersten Nicht-NULL-Wert in der list zurück

Verwenden Sie CASE, nicht IF

 CASE WHEN salesHeader.[Ship-to Name] IS NOT NULL THEN salesHeader.[Ship-to Name] ELSE poHeader.[Ship-to Name] END AS DeliveryName 

Bearbeiten:

Sowohl COALESCE- als auch ISNULL-Antworten geben in anderen Antworten gleichermaßen auch für diesen speziellen Fall (und einfacher, ehrlich gesagt)

Sie können CASE verwenden:

 (CASE WHEN cond-1 THEN value-if-1 WHEN cond-2 THEN value-if-2 ELSE default-value END) AS column-name 

Oder in dieser Situation können Sie COALESCE oder ISNULL verwenden:

 COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName ISNULL(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName 

Wie, was Gbn sagte, verwenden Sie CASE-statement stattdessen.

Da hat er schon die Codierung gemacht, also will ich das nicht noch gleich stellen.

Stattdessen geben Sie nur eine Website, um für Ihr Verständnis zu verweisen

a) SQL SERVER – CASE Statement / Expression Beispiele und Erläuterung

b) CASE-function in SQL server 2005 – Teil I

c) CASE-function in SQL server 2005 – Teil II

d) CASE-function in SQL server 2005 – Teil III

Nicht sicher, aber musst du nicht den 'AS DeliveryName' außerhalb der IF setzen?

Zumindest funktioniert das bei MySQL …