2017-02-10 192 views
2

這個查詢使用ISNULL():在WHERE子句

SELECT 
    sc.ContactID 
    , c.Price 
    , p.ParkID 
    FROM 
     tblc c 
     JOIN tblsc ON c.ID= sc.ID 
     LEFT JOIN tblp p ON sc.ID= p.ID 
    WHERE 
     (stuff = stuff) 
     AND (stuff = stuff) 

返回此:

ContactID LeadSalePrice  ParkID 
------------------------------------- 
    1   50    NULL 
    2   60    22 

現在,我想建立另一個AND子句ParkID。但是,我只想在ParkID不爲NULL的行上執行此AND。因此,如果在ParkID爲NULL的行上,我們希望始終保留這些行。在ParkID不爲NULL的行上,如果ParkID與參數匹配,我們只想保留這些行。

如果@ParkID = 22,則返回兩行。

如果@ParkID <> 22,那麼只返回最上面一行。

如果@ParkID = NULL,則返回兩行。

我已經試過這樣:

SELECT 
    sc.ContactID 
    , c.Price 
    , p.ParkID 
FROM 
    tblc c 
    JOIN tblsc ON c.ID= sc.ID 
    LEFT JOIN tblp p ON sc.ID= p.ID 
    WHERE 
     (stuff = stuff) 
     AND (stuff = stuff) 
     AND p.ParkID = 
      CASE WHEN p.ParkID IS NULL THEN 
       NULL 
      ELSE 
       @ParkID 
      END 

這不起作用,因爲適當的方式與空比較是不是:

= NULL 

這是

IS NULL 

對於相同的原因(我認爲),這也不起作用:

AND p.ParkID = Isnull(p.ParkID, @ParkID) 

我該怎麼做?

回答

5

簡單的檢查,如果p.ParkIDNULL它匹配@ParkID

WHERE p.ParkID IS NULL 
    OR p.ParkID = @ParkID 
+0

謝謝!我會測試這個 –