此查询:
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
子句。但是,我只想在AND
IS NOT NULL的行上执行此ParkID
。因此,如果在ParkID
为空的行中,我们希望始终保留这些行。在ParkID IS NOT 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比较的正确方法不是:
= NULL
这是
IS NULL
出于同样的原因(我假设),这也不起作用:
AND p.ParkID = Isnull(p.ParkID, @ParkID)
我该怎么做?
答案 0 :(得分:5)
只需检查p.ParkID
NULL
或是否与@ParkID
匹配:
WHERE p.ParkID IS NULL
OR p.ParkID = @ParkID
答案 1 :(得分:1)
更紧凑:
WHERE p.ParkID IN ('', NULL)