2017-03-06 3 views
0

私は現在、私たちのロギングに関する小さなレポートを作成しようとしていますが、期待通りに動作しません。クエリが完全に変更された結果を別のLIKE句に追加すると、クエリは正常に動作しますか?

私はLIKE句が1つしかないときにうまく動作するクエリを作成しましたが、クエリにORを追加すると、結果が不正になります。なぜこれが起こっているのか分かりません。私はグルーピングや何かが欠けていますか?ここで

は、それが動作するクエリです:ここでは

select 
s.SupportCode 
, s.DateTaken 
, s.TakenBy 
, s.AllocatedTo 
--, p.IndustrySector 
from 
Support s 
join Project p on p.ProjectCode = s.ProjectCode 
where 
s.DateTaken >= dateadd(month, datediff(month, 0, dateadd(m, -6, current_timestamp)),0) 
and s.SupportAction like '%RMC%' 

は、私が欲しいものである、その結果である:私は他のLIKE句を追加したときにここで

╔══════════╦═════════════════════════╦═════╦═════╗ 
║ 00074062 ║ 2017-01-25 00:00:00.000 ║ JCH ║ JCH ║ 
║ 00073482 ║ 2016-12-14 00:00:00.000 ║ ROA ║ FJ ║ 
║ 00072764 ║ 2016-11-10 00:00:00.000 ║ ROA ║ ROA ║ 
║ 00072660 ║ 2016-11-03 00:00:00.000 ║ FJ ║ FJ ║ 
║ 00073818 ║ 2017-01-11 00:00:00.000 ║ ROA ║ FJ ║ 
║ 00070844 ║ 2016-09-14 00:00:00.000 ║ ROA ║ FJ ║ 
║ 00070988 ║ 2016-09-22 00:00:00.000 ║ ROA ║ ROA ║ 
╚══════════╩═════════════════════════╩═════╩═════╝ 

はクエリです:

:ここ
select 
s.SupportCode 
, s.DateTaken 
, s.TakenBy 
, s.AllocatedTo 
--, p.IndustrySector 
from 
Support s 
join Project p on p.ProjectCode = s.ProjectCode 
where 
s.DateTaken >= dateadd(month, datediff(month, 0, dateadd(m, -6, current_timestamp)),0) 
and s.SupportAction like '%RMC%' 
or s.SupportAction like '%FJ%' 
or s.SupportAction like '%DG%' 
or s.SupportAction like '%VIC%'; 

は結果であり、

╔══════════╦═════════════════════════╦═════╦══════╗ 
║ 00031254 ║ 1996-11-04 00:00:00.000 ║ KGB ║ KGB ║ 
║ 00031279 ║ 1996-11-12 00:00:00.000 ║ TB ║ TMB ║ 
║ 00031296 ║ 1996-11-18 00:00:00.000 ║ SPB ║ BJR ║ 
║ 00031402 ║ 1997-01-07 00:00:00.000 ║ AJS ║ AJS ║ 
║ 00031474 ║ 1997-02-04 00:00:00.000 ║ BJR ║ NULL ║ 
║ 00031513 ║ 1997-02-19 00:00:00.000 ║ NS ║ NULL ║ 
║ 00031538 ║ 1997-02-25 00:00:00.000 ║ SPB ║ SPB ║ 
╚══════════╩═════════════════════════╩═════╩══════╝ 

どうしてですか?私は理由について考えることができません。

ご協力いただければ幸いです。

答えて

3

角括弧を追加するとどうなりますか?あなたなしであなたの質問は有効ではありません。これはうまくいかなければなりません。

select 
    s.SupportCode 
    , s.DateTaken 
    , s.TakenBy 
    , s.AllocatedTo 
    --, p.IndustrySector 
    from 
    Support s 
    join Project p on p.ProjectCode = s.ProjectCode 
    where 
    s.DateTaken >= dateadd(month, datediff(month, 0, dateadd(m, -6, current_timestamp)),0) 
    and (s.SupportAction like '%RMC%' 
    or s.SupportAction like '%FJ%' 
    or s.SupportAction like '%DG%' 
    or s.SupportAction like '%VIC%'); 
+0

これは完璧です!私は角括弧が必要なのか分からなかった。 – Sp00kyy

1

すべてのまたは句のあいだにかっこを入れることが問題です。このように:

and (s.SupportAction like '%RMC%' 
or s.SupportAction like '%FJ%' 
or s.SupportAction like '%DG%' 
or s.SupportAction like '%VIC%'); 
0
When use multiple 'OR' condition in Where clause must use open and close brackets like this 
where 
(s.DateTaken >= dateadd(month, datediff(month, 0, dateadd(m, -6, current_timestamp)),0)) 
and (s.SupportAction like '%RMC%' 
or s.SupportAction like '%FJ%' 
or s.SupportAction like '%DG%' 
or s.SupportAction like '%VIC%') 
関連する問題