我使用了SqlDataSource,并有一個基于District& Zone的選擇查詢,如下所示
SELECT a. [committee_id] memberid, a. [membername], a. [memberemail], a. [memberdesignation], a.[membercreatedby],b.districtname AS district,b.districtid,c.zone_name AS zone,c.zoneid
FROM [committee_details] a
LEFT JOIN district_master b on b.districtid=a.districtid
LEFT JOIN zone_master c on c. districtid=a.districtid and c.zoneid =a.zoneid
WHERE (a.[membercreatedby] = 'director') AND ((convert(varchar,a.districtid) LIKE '%2%'/span>) AND (convert(varchar,a.zoneid) LIKE '%%'/span>)) ORDER BY a. [committee_id] DESC
這是一個行內查詢。我已經嘗試了上述查詢,但無法找出如何基于條件的選擇。
我想如果提供了區,那么就根據區來選擇,如果同時提供了區& 區,那么就根據這兩個&來選擇;如果沒有提供,就選擇所有。但應該是在單一的查詢中。我應該怎么做呢?
uj5u.com熱心網友回復:
首先,修正你的查詢,這樣你就不會使用無意義的表別名。 使用表的縮略語! 我也會放棄所有的方括號;它們只會使查詢更難寫和更難讀。
基本上,你希望在WHERE子句中使用NULL進行比較。 我不知道為什么你的示例代碼使用LIKE,特別是那些看起來是數字的列。 問題中沒有任何內容解釋為什么使用LIKE來進行比較,所以想法是:
SELECT cd.committee_id as memberid, cd.membername,
cd.memberemail, cd.memberdesignation, cd.membercreatedby,
dm.districtname AS district, dm.districtid,
zm.zone_name AS zone, zm.zoneid
FROM committee_details cd LEFT JOINON cd.districtid = dm.districtid LEFT join
區長 zm
ON zm.districtid =cd.districtid AND
zm.zoneid = cd.zoneid
WHERE cd.membercreatedby = 'director') and
(cd. districtid = @district or (cd. keyword">or @district is null) and
(cd. zoneid = @zone 或 @zone 是 空)
ORDER BY cd. [committee_id] DESC;
如果你使用的是LIKE,那么我會將邏輯表述為:
WHERE cd.membercreatedby = 'director') AND
(cast(cd.directorid as varchar(255) like @district) and
(cast(cd.zoneid as varchar(255) like @zone)
當你希望所有的值都匹配時,以'%'的形式傳入模式。 這假定cd中的列不是NULL。 如果它們可以是NULL,那么你就需要一個明確的比較,就像第一個例子中那樣。
uj5u.com熱心網友回復:
如果我的問題是正確的,那么你可以使用引數,并在沒有提供或不存在值的情況下與列本身進行比較。
試試下面的方法:
SELECT a. [committee_id] memberid, a. [membername], a. [memberemail], a. [memberdesignation], a.[membercreatedby],b.districtname AS district,b.districtid,c.zone_name AS zone,c.zoneid
FROM [committee_details] a
LEFT JOIN district_master b on b.districtid=a.districtid
LEFT JOIN zone_master c on c. districtid=a.districtid and c.zoneid =a.zoneid
WHERE (a.[membercreatedby] = 'director')
and b.districtname = isnull(nullif(@districtname, ''/span>), b. districtname)
AND c.zone_name = isnull(nullif(@zone_name, ' '), c.zone_name)
ORDER BY a.[committee_id] DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311086.html
標籤:
