簡體   English   中英

SQL服務器條件連接

[英]SQL server conditional join

我必須根據一個可以為null的值來選擇相關列。 詳細:

SELECT shoporders.orderid, 
   shopaddresses.companyname, 
   shopaddresses.firstname, 
   shopaddresses.lastname, 
   shopaddresses.address1,  
FROM   shoporders 
   INNER JOIN shopaddresses 
           ON shoporders.InvoiceAddressId = shopaddresses.addressid
where orderid = 110
order by shoporders.createddate desc

如果shoporders.InvoiceAddressId為null,那么我必須使用shoporders.DeliveryAddressId

任何線索?

提前致謝

ON coalesce(shoporders.InvoiceAddressId, shoporders.DeliveryAddressId) = shopaddresses.addressid

你可以試試

SELECT shoporders.orderid, 
   shopaddresses.companyname, 
   shopaddresses.firstname, 
   shopaddresses.lastname, 
   shopaddresses.address1,  
FROM   shoporders 
   INNER JOIN shopaddresses 
           ON COALESCE (shoporders.InvoiceAddressId, shoporders.DeliveryAddressId)  = shopaddresses.addressid
where orderid = 110
order by shoporders.createddate desc

編輯:有關合並的定義,請參閱MSDN 以下摘要

返回其參數中的第一個非空表達式。 COALESCE(expression1,...n)等效於以下CASE表達式:

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   ...

   ELSE expressionN

END

你可以試試

 SELECT shoporders.orderid, 
       shopaddresses.companyname, 
       shopaddresses.firstname, 
       shopaddresses.lastname, 
       shopaddresses.address1,  
       FROM   shoporders 
       INNER JOIN shopaddresses 
       ON( 
          (shoporders.InvoiceAddressId IS NOT NULL  
                  AND shoporders.InvoiceAddressId = shopaddresses.addressid)
          OR (shoporders.DeliveryAddressId = shopaddresses.addressid) 
          )

       WHERE orderid = 110
       ORDER BY shoporders.createddate DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM