■SI Object Browser 掲示板
|
ユーザの皆様、開発者、サポート担当者の交流のための掲示板です! ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。 なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。 |
|
| ※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】 ※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。 ※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。 ※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。 | |
select構文の抽出条件の対応方法
2009/12/13 20:43
OB
2
masato
ReadOnlyを使って、レコードの抽出を活用しています。
以下のような条件で抽出を使用しようとしていますが、このような煩雑な抽出条件に
対して、対応方法はあるのでしょうか?
ぜひヒントをいただきたいです。
TableName
X Y A1 A2 B1 B2 C1 C2 D1 D2
抽出条件
If X=D2 And Y=D2 Then
K=1
ElseIf X=D2 And Y=C2 Then
K=C1
ElseIf X=D2 And Y=B2 Then
K=B1*C1
ElseIf X=D2 And Y=A2 Then
K=A1*B1*C1
ElseIf X=C2 And Y=D2 Then
K=1/C1
ElseIf X=C2 And Y=C2 Then
K=1
ElseIf X=C2 And Y=B2 Then
K=B1
ElseIf X=C2 And Y=A2 Then
K=A1*B1
ElseIf X=B2 And Y=D2 Then
K=1/B1*C1
ElseIf X=B2 And Y=C2 Then
K=1/B1
ElseIf X=B2 And Y=B2 Then
K=1
ElseIf X=B2 And Y=A2 Then
K=A1
ElseIf X=A2 And Y=D2 Then
K=1/A1*B1*C1
ElseIf X=A2 And Y=C2 Then
K=1/A1*B1
ElseIf X=A2 And Y=B2 Then
K=1/A1
ElseIf X=A2 And Y=A2 Then
K=1
Else
End If
以下のような条件で抽出を使用しようとしていますが、このような煩雑な抽出条件に
対して、対応方法はあるのでしょうか?
ぜひヒントをいただきたいです。
TableName
X Y A1 A2 B1 B2 C1 C2 D1 D2
抽出条件
If X=D2 And Y=D2 Then
K=1
ElseIf X=D2 And Y=C2 Then
K=C1
ElseIf X=D2 And Y=B2 Then
K=B1*C1
ElseIf X=D2 And Y=A2 Then
K=A1*B1*C1
ElseIf X=C2 And Y=D2 Then
K=1/C1
ElseIf X=C2 And Y=C2 Then
K=1
ElseIf X=C2 And Y=B2 Then
K=B1
ElseIf X=C2 And Y=A2 Then
K=A1*B1
ElseIf X=B2 And Y=D2 Then
K=1/B1*C1
ElseIf X=B2 And Y=C2 Then
K=1/B1
ElseIf X=B2 And Y=B2 Then
K=1
ElseIf X=B2 And Y=A2 Then
K=A1
ElseIf X=A2 And Y=D2 Then
K=1/A1*B1*C1
ElseIf X=A2 And Y=C2 Then
K=1/A1*B1
ElseIf X=A2 And Y=B2 Then
K=1/A1
ElseIf X=A2 And Y=A2 Then
K=1
Else
End If
返信を投稿
OB
後迫@SI
こんにちは
後迫@SIです。
お問い合わせいただきました件についてですが、
接続先のOracleが8.1.6以上でしたら
以下のようにCASE文を使用して抽出が可能ですので、
お試しいただけますでしょうか。
select *
from TableName
where K = case
when X=D2 And Y=D2 Then 1
when X=D2 And Y=C2 Then C1
when X=D2 And Y=B2 Then B1*C1
・
・
end
また、もしOracleのバージョンが8.1.5以下でしたら、
CASE文は使用できないため、以下のように
AND,ORで条件をつなげていただく必要がございます。
where ((X=D2 And Y=D2) And (K=1)) or
((X=D2 And Y=C2) And (K=C1)) or
((X=D2 And Y=B2) And (K=B1*C1)) or
・
・
何卒よろしくお願いいたします。
後迫@SIです。
お問い合わせいただきました件についてですが、
接続先のOracleが8.1.6以上でしたら
以下のようにCASE文を使用して抽出が可能ですので、
お試しいただけますでしょうか。
select *
from TableName
where K = case
when X=D2 And Y=D2 Then 1
when X=D2 And Y=C2 Then C1
when X=D2 And Y=B2 Then B1*C1
・
・
end
また、もしOracleのバージョンが8.1.5以下でしたら、
CASE文は使用できないため、以下のように
AND,ORで条件をつなげていただく必要がございます。
where ((X=D2 And Y=D2) And (K=1)) or
((X=D2 And Y=C2) And (K=C1)) or
((X=D2 And Y=B2) And (K=B1*C1)) or
・
・
何卒よろしくお願いいたします。
返信を投稿
OB