- PR -

SQL WHERE句で条件分岐の方法

投稿者投稿内容
のの
ベテラン
会議室デビュー日: 2004/11/10
投稿数: 88
投稿日時: 2007-05-07 16:47
お世話になります。

SQLのWhere句で条件分岐は可能でしょうか?

例えば、Table AAA が、項目X、項目Y、項目Zで
構成されているとして、、、
 ・項目Xが”10”の時、
   ⇒ Where句で、項目Y > ’1000’
 ・項目Xが”20”の時、
   ⇒ Where句で、項目Y > ’2000’
 ・項目Xが”30”の時、
   ⇒ Where句で、項目Y > ’3000’
といった様な条件分岐を実現したいのですが。
可能でしょうか?

※SQLServer2000です。

宜しくお願いします。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-05-07 16:53
select *
from AAA
where (項目X = '10' AND 項目Y > '1000')
or (項目X = '20' AND 項目Y > '2000')
or (項目X = '30' AND 項目Y > '3000')

外してるかな。
こういうことじゃなくってですか?
のの
ベテラン
会議室デビュー日: 2004/11/10
投稿数: 88
投稿日時: 2007-05-07 16:59
 回答ありがとうございます。

 厳密には、項目Xが’10’の時、
  「Where句で、項目Y > ’1000’」
 という条件のみを指定して、SELECTしたいのです。
 
 出来ますでしょうか?

[ メッセージ編集済み 編集者: のの 編集日時 2007-05-07 17:00 ]
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-05-07 17:10
引用:

ののさんの書き込み (2007-05-07 16:59) より:
 厳密には、項目Xが’10’の時、
  「Where句で、項目Y > ’1000’」
 という条件のみを指定して、SELECTしたいのです。


かめたろさんのSQLで「項目Xが'10'のときはY>'1000'を条件に」出来ていると思いますが、どこが希望に沿わないのでしょうか?

まさか
select * from AAA where (項目X = '10' AND 項目Y > '1000')
だけでいいということじゃないですよね?

(追記)
あ、ひょっとして
select * from AAA where (項目X <> '10' OR 項目Y <= '1000')
とか?

[ メッセージ編集済み 編集者: shimix 編集日時 2007-05-07 17:19 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-05-07 17:15
だけ、のつもりなのかな。
だとしたら、
コード:

***かめたろさんの書き込みから借用***

select *
from AAA
where
(
  (項目X = '10' AND 項目Y > '1000')
 or (項目X = '20' AND 項目Y > '2000')
 or (項目X = '30' AND 項目Y > '3000')
)
 AND 項目X = ?


ってんでどうかと。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-05-07 17:21
こんにちは

コード:
select * from AAA
where 項目X in (10,20,30)
and 項目Y > 項目X * 100;



じゃだめかなw?
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2007-05-07 17:29
unionを知らないだけなのでは?
・・・って、たぶんみんな分かっていてレスしてるんですよね?

(「他人に分かるように」「知らない人に説明するように」書かないと通じない、という教訓ですね。)
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2007-05-07 17:30
こういうやつでしょうか
コード:
select *
from aaa
where 1 = case when x=10 then case when y > 1000 then 1 else null end
               when x=20 then case when y > 2000 then 1 else null end
               when x=30 then case when y > 3000 then 1 else null end
               else null end

スキルアップ/キャリアアップ(JOB@IT)