一連の条件に基づいて情報を収集するクエリがあります。基本的に、その場所の1日の支払い額が50ドルを超えているかどうかを知りたいORコメントセクションには、単語「フィルター」が含まれています...
私のクエリは:
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' + '%')
問題は460の結果を返し、2のみを返す必要があることです。
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' + '%')
私はあなたの提案の束を結合し、上記で出てきました。これは機能します。ありがとう!
Paid_Out_AmoutnおよびPaid_Out_Comment基準を2番目の括弧のセットで囲む必要があります。
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' + '%')
)
ORの用途によって異なります。Paid_Out_Amountが50より大きいか、Paid_Out_AmountがN%Filter%のようになっています。句に角かっこを追加してください
WHERE
(
(1 = 1)
AND
(2 = 2)
)
OR
( 3 = 3 )
ブラケットのセットが1つ欠けているようです:
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%'
)
また、そのLIKEコマンドを確認する必要があります。コードをすべて更新してコメントをすべて小文字に設定し、Wordフィルターを検索します。
また、Paid_Out_Datetimeチェックについては、BETWEENコマンドを確認してください。
AND
はOR
よりも優先されます。優先順位を制御したい場合は、条件をグループ化する必要があります。これを試して:
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' + '%') )
次のクエリで試してください:
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' + '%')
where句の最初の部分( '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_Amount > 50)
) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')