2017-02-23 122 views
0

我有我的查詢問題:SQL服務器:問題與查詢

SELECT Firma, Czas, Dzien, Opis, Kto, ID 
FROM Rok2016 
WHERE (Dzien BETWEEN @z1 AND @z2) 
    AND (Firma = @x) 
    AND (Kto = @y) 

我已經修改它,當我在@x參數放*,它應該是@z1之間顯示的所有記錄數據@z2日期

感謝

+0

你是說你想要'Firma = @ x'謂詞是可選的嗎? – mendosi

+0

...不看'@ y'? – ydoow

回答

0

希望這是你想要的。

SELECT Firma, Czas, Dzien, Opis, Kto, ID 
FROM Rok2016 
WHERE (Dzien BETWEEN @z1 AND @z2) 
AND ((@x='*' AND Firma!='')OR(@x!='*' AND [email protected])) 
AND (Kto = @y) 
+0

這就是它!謝謝 –

0

修改根據您的查詢

SELECT 
    Firma, Czas, Dzien, Opis, Kto, ID 
FROM 
    Rok2016 
WHERE 
    ((Dzien BETWEEN @z1 AND @z2) AND (Firma = @x) AND (Kto = @y) AND (@x != '*')) 
OR 
    ((Dzien BETWEEN @z1 AND @z2) AND (Firma = @x) AND (@x = '*')) 

如果@x不等於*它會運行原始查詢。

否則,如果你把*@x,它顯示的數據@z1@z2日期之間的所有記錄,不檢查Kto = @y

0

雖然你可以修改此查詢到有類似... (((Firma = @x) AND (Kto = @y)) OR @x = '*')這種做法可能會導致與得到的問題爲您的查詢優化查詢計劃。有關更多詳細信息,請參閱 http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

我建議寫兩個不同的查詢,一個用於(Firma = @x) AND (Kto = @y)而另一個對FirmaKto沒有過濾器,然後讓你的應用程序選擇哪種查詢的基礎上@x值執行。