2016-12-19 4 views
0

2つの列の日付範囲条件と3つ目の余分な条件の助けが必要な場合は、2つの列に範囲問合せを適用する必要があります。私は、日付と一緒に1つの以上の条件のための3番目の列を入れていない場合は正常に動作しますが、私は状態の3列目を置けば、それがなければなりませんように私はなり2列のDateRangeと1つの列の主条件

私の構造を与えていません。

以下のクエリ
InDate datetime, 
OutTime datetime, 
payment nvarchar(10) 

2つのカラム条件

select * from WEIGHT where 
Odate between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999' 
or wdatetime between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999' 
order by srno 

と正常に動作しますが、私は3列目から第三条件を適用した場合、それは

select * from WEIGHT where 
Odate between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999' 
or wdatetime between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999' 
and Payment='ABC' 
order by srno 
012私に間違ったレコードを提供します

が、私はそれが働いていない理由は、私にはわからない3列目からの1つの余分の条件と一緒に2列に範囲クエリを適用したい、それは満足conidtionsのレコードを与えなければならないが、それはないです

+0

を試してみてください。例えば'19/Dec/2016 00:00:00.000 'と'19/Dec/2016 23:59:59.999'の間のOdateまたは'19/Dec/2016 00:00:00.000の間のwdatetimeの 'select * from WEIGHT ' 「19/Dec/2016 00:00:00.000」から「19/Dec/2016 23:59:59.999」まで、 '19/Dec/2016 00:00:00.000 'と'19/Dec/2016 23:59:59.999'との間のwdatetime)と(Payment = 'ABC')による注文は、srnoによって括弧のついていないwhere節で[or]と[and]を混ぜると、通常混乱の原因となります。素敵な説明のために – encryptoferia

答えて

0

1つのオプションは、サブクエリを書き込むことです。

Select sub.*(
    SELECT * FROM Weight WHERE 
    ODATE BETWEEN '19/Dec/2016 00:00:00.000' AND '19/Dec/2016 23:59:59.999' 
    OR 
    WDATETIME BETWEEN '19/Dec/2016 00:00:00.000' AND '19/Dec/2016 23:59:59.999' 
)sub 
WHERE sub.Payment = 'ABC' ORDER BY SRNO 

これは基本的に日付選択を実行してから、その結果から支払い選択を実行します。

3

AND演算子はOR演算子よりも優先されます。何がしたいことは、彼らが厳しく、彼らがこのような場合には、私は、括弧を使用して、常に示唆している、必要としていない場合でも

(X OR Y) AND Z

あるときあなたのクエリが効果的

X OR (Y AND Z)

です混合時の明瞭性ANDおよびOR

+0

+1 –

0
select * from WEIGHT where (Odate between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999' or wdatetime between '19/Dec/2016 00:00:00.000' and '19/Dec/2016 23:59:59.999') and Payment='ABC' order by srno 

私はグループにあなたのところの条件を括弧を使用することをお勧めします。この

関連する問題