我正在尝试在SQL 2008 R2中编写存储过程并遇到重大问题。它背后的查询应该提取名字,姓氏,余额和&案件类型。问题是,某些人(即结果)将具有相同的名称。所以我添加了一个参数@DOB来清除它们。如果有多个人具有相同的名称,则用户应该能够输入出生日期并且只能让该人回来。问题是......我无法让它发挥作用。这是我的查询 - 警告我使用别名我道歉如果它令人困惑地阅读:
SELECT cs.last_name ,
cs.first_name ,
cs.dob,
cb.assessment_balance_due ,
cb.case_number,
ct.case_type_title
FROM vw_customer_service cs
INNER JOIN vw_case_balance cb ON cs.case_ID = cb.case_ID
INNER JOIN [case] on cs.case_ID = [case].case_ID
INNER JOIN cd_case_type ct ON [case].case_type_ID = ct.case_type_ID
WHERE **--(cs.dob = case when @dob is null then cs.dob else @dob end )** and
cb.assessment_balance_due > 0
AND cs.last_name = @LastName
AND cs.first_name = @FirstName
AND party_type_ID = 28 --defendant
AND (@dob IS NULL)
GROUP BY
cs.case_ID, cs.last_name, cs.first_name , cb.Assessment_Balance_Due,DOB, cb.case_number, ct.case_type_title
如果用户放入DOB,这只会返回数据,但我希望这只是一个选项。如何根据一个参数过滤结果集或如果参数未关闭则根本不过滤?提前谢谢!
答案 0 :(得分:1)
你可以这样做:
where (@dob is null or cs.dob = @dob) ...
答案 1 :(得分:1)
试试这个......
SELECT cs.last_name , cs.first_name , cs.dob, cb.assessment_balance_due , cb.case_number, ct.case_type_title
from vw_customer_service cs
INNER JOIN vw_case_balance cb on cs.case_ID = cb.case_ID
INNER JOIN [case] on cs.case_ID = [case].case_ID
INNER JOIN cd_case_type ct on [case].case_type_ID = ct.case_type_ID
where (@dob is null or cs.dob=@dob)
and cb.assessment_balance_due > 0
and cs.last_name = @LastName
and cs.first_name = @FirstName
and party_type_ID = 28 --defendant
--and (@dob is null)
group by cs.case_ID, cs.last_name, cs.first_name , cb.Assessment_Balance_Due,DOB, cb.case_number, ct.case_type_title