2017-02-23 1 views
0

Ich habe Probleme mit meiner Anfrage:SQL Server: Problem mit Abfrage

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

Ich habe es so zu modifizieren, wenn ich * im @x Parametern setzen, es soll Daten aller Datensätze zwischen @z1 zeigen, und @z2 Termine

Dank

+0

Wollen Sie sagen, dass das Präfix "Firma = @ x" optional sein soll? – mendosi

+0

... ohne auf '@ y' zu schauen? – ydoow

Antwort

0

Hoffnung das ist, was Sie wollen.

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

Das ist es! Vielen Dank –

0

auf Ihre Anfrage Modified basiert

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 = '*')) 

Wenn @x-* nicht gleich ist, würde es Ihre ursprüngliche Abfrage ausführen.

Andernfalls, wenn Sie * in @x setzen, zeigt es, Daten auf alle Datensätze zwischen @z1 und @z2 Daten, ohne Kto = @y

0

Überprüfung Obwohl Sie diese Abfrage so etwas wie ... (((Firma = @x) AND (Kto = @y)) OR @x = '*') diesen Ansatz haben, ändern kann, könnte zu Problemen führen, mit einem immer optimaler Abfrageplan für Ihre Abfrage Weitere Details, http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

Ich würde empfehlen, zwei unterschiedliche Abfragen zu schreiben, eine für (Firma = @x) AND (Kto = @y) und eine andere, die keinen Filter hat auf Firma oder Kto und dann haben Ihre Anwendung auswählen, welche auf Basis auszuführen Abfrage auf den Wert der @x.