2014-06-09 33 views
0

我想創建一個SELECT語句中帶有可互換,其中內其聲明我已經拿到了2次嘗試不工作來展示你嘗試瞭解我試圖實現SELECTstatement具有可變WHERE

變量@holidayType確定用戶已預訂了什麼類型的假期,我想這也確定WHERE語句運行

下面

是我第一次嘗試

IF @HolidayType = 'P' 
     BEGIN 
      WHERE Holidays.Type <> 'A' 
      AND Holidays.Type <> 'DE' 
     END 
    ELSE 
     BEGIN 
      IF @HolidayType = 'A' 
       BEGIN 
        WHERE Holidays.Type <> 'P' 
        AND  Holidays.Type <> 'DE' 
       END 
      ELSE 
       BEGIN 
        WHERE Holidays.status <> 'DE' 
       END 
     END 

下面是我的第二個學嘗試T(更清楚一點)

WHERE 
    (
    CASE @HolidayType 
     WHEN 'A' THEN (Holidays.Type <> 'P' AND Holidays.Type <> 'DE') 
     WHEN 'P' THEN (Holidays.Type <> 'A' AND Holidays.Type <> 'DE') 
     WHEN 'F' THEN (Holidays.status <> 'DE') 
    END 
    ) 

選擇前兩者都比較簡單,它只是添加了Where聲明,對我來說是很難證明的。

回答

1

我提出以下解決方案。或許筆者會更清楚,因爲它是接近他的問題:

WHERE 
    (
    CASE @HolidayType 
     WHEN 'A' THEN CASE WHEN (Holidays.Type <> 'P' AND Holidays.Type <> 'DE') THEN 1 ELSE 0 END 
     WHEN 'P' THEN CASE WHEN (Holidays.Type <> 'A' AND Holidays.Type <> 'DE') THEN 1 ELSE 0 END 
     WHEN 'F' THEN CASE WHEN (Holidays.status <> 'DE') THEN 1 ELSE 0 END 
    END = 1 
    ) 
2
WHERE 
    (@HolidayType = 'A' AND Holidays.Type <> 'P' AND Holidays.Type <> 'DE') 
    OR 
    (@HolidayType = 'P' AND Holidays.Type <> 'A' AND Holidays.Type <> 'DE') 
    OR 
    (@HolidayType = 'F' AND Holidays.status <> 'DE') 
1

嘗試使用這樣的:

WHERE (@HolidayType = 'A' AND Holidays.Type <> 'P' AND Holidays.Type <> 'DE') OR 
     (@HolidayType = 'P' AND Holidays.Type <> 'A' AND Holidays.Type <> 'DE') OR 
     (@HolidayType = 'F' AND Holidays.status <> 'DE') 
+0

嗨,這句話後,我忘了,更不用說有將是一個額外的和聲明一些額外的規則將其合併好(如訂單明智的和事情) – Kieranmv95

+0

是的。你可以合併它。標記爲答案,如果它是正確的... – Jesuraja

+0

我收到一個錯誤,它似乎並沒有工作,我會更新它的工作時間:)謝謝 – Kieranmv95