2014-10-09 75 views
1

我想在SQL 2008 R2中編寫一個存儲過程,並遇到重大問題。它後面的查詢應該拉首字母,姓,餘額,&個案類型。問題是,有些人(即結果)將具有相同的名稱。所以我添加了一個參數@DOB來刪除它們。如果有幾個同名的人,用戶應該能夠輸入出生日期,並且只能讓他回來。問題是......我無法讓它工作。這裏是我的查詢 - 警告我使用別名,如果其迷惑我道歉閱讀:SQL查詢如果參數爲空

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

提出的解決方案*工作*,但他們可能不會規模非常好,如果表得到大和你有許多不同的參數組合。我稱之爲[廚房水槽現象](http://sqlsentry.tv/the-kitchen-sink-procedure/)。 – 2014-10-09 18:32:18

+0

我看了你的視頻 - 很棒的信息。但是,這份報告將始終以被告名稱運行,所以希望Kitchen Sink不適用於此! – eab 2014-10-15 01:21:59

回答

1

你可以這樣說:

where (@dob is null or cs.dob = @dob) ... 
+0

+1你打我:) – JiggsJedi 2014-10-09 18:29:49

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 [email protected]) 
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 
+0

我想我做到了:-) – 2014-10-09 18:30:19

+0

哇,你們真棒!非常感謝你的超級快速答案,現在就試試這個。再次感謝!! – eab 2014-10-09 18:53:36

+0

對不起,我不能將這兩個標記爲答案。再次感謝! – eab 2014-10-15 01:21:10