SQL Server中的SQL查询中的IF语句

5
我在使用这个sql-server查询中遇到了使用IF语句的问题。
我的要求是:
如果salesHeader.[Ship-to Name]不为null,我需要将它作为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_)
5个回答

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

编辑:

对于这个特定的情况,其他答案中提供的 COALESCE 和 ISNULL 答案同样有效(而且更简单)。


10

或者使用COALESCE...

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

COALESCE会返回列表中第一个非NULL值。


5
你可以使用 CASE:
(CASE WHEN cond-1 THEN value-if-1
      WHEN cond-2 THEN value-if-2
      ELSE default-value END) AS column-name

在这种情况下,您可以使用COALESCE或ISNULL函数:

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

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

2

1

不确定,但是你不是必须将“AS DeliveryName”放在IF之外吗?

至少在MySQL中是这样工作的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接