這樣?
select * from a
where typeid='助理'
and dept <> ''
或是..
select * from a
where typeid='助理'
and dept like '%%'
先假設 @typeid = 你輸入的職稱條件 @dept = 你輸入的部門條件
DECLARE @typeid nvarchar(50)
DECLARE @dept nvarchar(50)
SET @typeid = 你的條件 '' or 助理
SET @dept = 你的條件 '' or it
select * from a
where (typeid=@typeid or @typeid = '')
and (dept=@dept or @dept = '')
基本上,這個問題最好在你開發的程式(PHP,JAVA...)內判斷 , 類似 :
IF (dep=='')
{
// 要執行的 SQL
select * from a
where typeid='助理'
}
ELSE
{
// 要執行的 SQL
select * from a
where typeid='助理' and dept='it'
}
不然就寫個 Stored Procedure 在裡面判斷 dep 是否為空值 , 組出你要的 SQL
DECLARE @TypeID nvarchar(20), @Dept nvarchar(20)
SET @TypeID = '助理'
SET @Dept = 'it'
SELECT
*
FROM
RoleData
WHERE
1 = 1
AND typeid = @TypeID
-- 這是新寫法,我現在在用
AND dept = CASE WHEN @Dept = '' THEN dept ELSE @Dept END
這寫法還有一個好處,也是另一個建議:盡量不要使用 "空字串" 或 無輸入 來當做顯示全部的條件。
嚴謹一點使用一個類似 "ALL" 的字串來當做顯示全部,如此可以減少因為 bug 而沒有輸入到 Dept 資料時,誤顯示全部資料的情況。
AND dept = CASE WHEN @Dept = 'ALL' THEN dept ELSE @Dept END
(寧可沒出現,也不要出現不該出現的東西)
p.s. 以前我會使用以下這個寫法,但如果有部門名稱剛好是另一個部門的子字串時,就會誤判了。
再加上也只能用 "空字串" 來做為顯示全部條件,所以改成上面的寫法
-- 這是舊寫法,我已經不用了
AND dept LIKE '%%'