Ale*_*lex 5 sql t-sql sql-server
我在使用IF
此sql-server查询中的语句时遇到问题.
我想要的是:
如果salesHeader.[Ship-to Name]
不为null,我需要返回AS DeliveryName,如果它为null,则返回其他内容.
有没有办法if
在查询中使用语句执行此操作?
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_)
Run Code Online (Sandbox Code Playgroud)
gbn*_*gbn 11
使用CASE,而不是IF
CASE
WHEN salesHeader.[Ship-to Name] IS NOT NULL THEN salesHeader.[Ship-to Name]
ELSE poHeader.[Ship-to Name]
END AS DeliveryName
Run Code Online (Sandbox Code Playgroud)
编辑:
对于这个特殊情况,COALESCE和ISNULL答案给出的其他答案同样有效(并且更简单,坦率地说)
或者使用COALESCE ......
SELECT
COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName
Run Code Online (Sandbox Code Playgroud)
COALESCE将返回列表中的第一个非NULL值
你可以使用CASE:
(CASE WHEN cond-1 THEN value-if-1
WHEN cond-2 THEN value-if-2
ELSE default-value END) AS column-name
Run Code Online (Sandbox Code Playgroud)
或者在这种情况下你可以使用COALESCE或ISNULL:
COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName
ISNULL(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName
Run Code Online (Sandbox Code Playgroud)