这个查询:
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)
Run Code Online (Sandbox Code Playgroud)
返回此:
ContactID LeadSalePrice ParkID
-------------------------------------
1 50 NULL
2 60 22
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试为其设置另一个AND
条款ParkID
.但是,我只想AND
在ParkID
IS NOT NULL的行上执行此操作.因此,如果在ParkID
IS NULL的行上,我们希望始终保留这些行.在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
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为与null比较的正确方法不是:
= NULL
Run Code Online (Sandbox Code Playgroud)
它的
IS NULL
Run Code Online (Sandbox Code Playgroud)
出于同样的原因(我假设),这也不起作用:
AND p.ParkID = Isnull(p.ParkID, @ParkID)
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
简单的检查,如果p.ParkID
是NULL
还是它匹配@ParkID
:
WHERE p.ParkID IS NULL
OR p.ParkID = @ParkID
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4791 次 |
最近记录: |