sql - Verwendung von "und" und "oder" in einer "Where" -Klausel

Translate

Ich habe eine Abfrage, die Informationen basierend auf einer Reihe von Bedingungen sammelt. Grundsätzlich möchte ich wissen, ob ein Standort mehr als 50 US-Dollar pro Tag ausgezahlt hat ODER ob der Kommentarbereich das Wort "Filter" enthält ...

Meine Anfrage lautet:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50) OR
                         (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')

Das Problem ist, dass es 460 Ergebnisse zurückgibt und nur 2 zurückgeben sollte.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Sie müssen Ihre Kriterien Paid_Out_Amoutn und Paid_Out_Comment in einen zweiten Satz von Klammern setzen:

SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, 
    Update_UserName, Till_Number 
FROM Paid_Out_Tb 
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >= 
    DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND 
    (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND 
    (
        (Paid_Out_Amount > 50) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
    )
Quelle
Translate

Es hängt wirklich davon ab, wofür Sie den OP verwenden. Sie haben Paid_Out_Amount ist größer als 50 oder Paid_Out_Amount ist wie N% Filter%. Fügen Sie Ihrer Klausel einige Klammern hinzu

WHERE 
(
    (1 = 1)
    AND
    (2 = 2)
)
OR
( 3 = 3 )
Quelle
Translate

Es sieht so aus, als ob Ihnen ein Satz Klammern fehlt:

SELECT        
    Store_Id
    , Paid_Out_Amount
    , Paid_Out_Comment
    , Paid_Out_Datetime
    , Update_UserName
    , Till_Number
FROM            
    Paid_Out_Tb
WHERE        
    Store_Id = 1929
    AND Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)
    AND Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
    AND
    (
        Paid_Out_Amount > 50
        OR
        LOWER(Paid_Out_Comment) LIKE '%filter%'
    )

Sie müssen sich auch diesen LIKE-Befehl ansehen - den Code aktualisiert, um alle Kommentare auf Kleinbuchstaben zu setzen und nach dem Wortfilter zu suchen.

Überprüfen Sie auch den Befehl ZWISCHEN für Ihre Paid_Out_Datetime-Prüfung

Quelle
Translate

ANDhat Vorrang vorOR. Sie müssen Ihre Bedingungen gruppieren, wenn Sie die Priorität steuern möchten. Versuche dies:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                     GETDATE()), 0)) AND ( (Paid_Out_Amount > 50) OR
                     (Paid_Out_Comment LIKE N'%' + 'Filter' + '%') )
Quelle
Translate
SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 20) OR
                         (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')

Ich habe eine Reihe Ihrer Vorschläge gekoppelt und bin mit den oben genannten herausgekommen. Das funktioniert. Vielen Dank!

Quelle
Translate

Versuchen Sie es mit folgender Abfrage:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE       ((Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50)) OR
                         (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
Quelle
Translate

Sie müssen den ersten Teil der where-Klausel (bis zu 'OR') in Klammern einfügen.

(
 (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50)

) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
Quelle
Leave a Reply
You must be logged in to post a answer.
Über den Autor