SQLサーバーの場合なく使用する場合
-
18-09-2019 - |
質問
があるので、書き換え取引SQL文を使用した場合の構造が同じなのです。
を使用している製品は内蔵のクエリーデザイナーや、独自の疑似SQL.で限界まで利用できるSQL ServerやOracle.私はこのカラムが基になるデータベースはOracleを使用してデコード(協).しかしながらプレーする必要がありましてSQLサーバーの場合には対応しておりません。
のようにしている変換するというように
Decode (StatusColumn, 'Value 1',
Decode(Sign(Now()-TargetDateColumn)),1,'Past
Due', 'Outstanding'), 'Value 2',
Decode(Sign(Now()-TargetDateColumn)),1,'Past
Due', 'Outstanding'), 'Value 3',
Decode(Sign(Now()-TargetDateColumn)),1,'Past
Due', 'Outstanding'), 'Value 4')
いように、特定のSQLオプションを使用する場合という選択肢はないと思います。いその他と合体すが、うまくいってしまい困ってます。
かわいの日付の計算、解決しました。
私の場合は質問を、ここに無い.
よろしく!
更新:
てきているのを感じとしては詳細については理由の制限は、この開発者である資源と仮定した場合に想定されることは、開発商品です。温泉ではありません。
を使用しているエンタープライズソフトウェア製品を内蔵してクエリのデザイナー独自の疑似SQL.で限界まで利用できるSQL ServerやOracle.基本的には、まないものの解析では、内蔵のエンゲームです。そのすべての認可されている機能や表現、すべてのデータ抽象化(内部のオブジェクトに対応する物理的なテーブルデータベース、およびその他のクエリで作成された製品のリサイクルマテリアルからOracleまたはSQL取引SQLない明示的に解析.
その場合な作品だと思いることがまとめられることにより、この解析の疑似SQLクエリーエンジンです。
最終的には、私のように:
- 使用製品のクエリ デザイナーのSQLとの 構文解析もしくは
- 利用イキャストならではの資源から は、SQL Serverデータベースの クエリーデザイナーを取得できます。
に基づいた答えたら、こちらのアプローチを行った。
Jason DeFontesることを示唆使うことがでデータベースのビューを行う場合の規則やることが#2。を動作させることができていただき、良い眺めではあるんだメンテナンスではなくて、richartallentの真実のテーブルアプローチをまとめていきたいと思いりジェイソンのアプローチ。パスカルの提案の作成機能が同じラインできなかったが、おそらく休憩の解析.
で作成したデータベースを見るすべての変換時にIを追加でクエリの挿入では、既存のSQLいただけます。こんにくを加え、オーバーヘッドをデータベースエンジンとしてできないものであり、それぞれ取得するのと同じデータセットを回(とデニースザメネースパーク、クエリがでる場合がほとんどが課題です。
こ"の利用に蓑で"デザインだから、帰れなかった私にとって不思議のうえで、より効率的なアプローチ:
- を使用する場合;
- を用い熱膨張係数(再richardtallent);
- 利用組合(HLGEM);
- サブクエリを使用(MisterZimbu);
まだチェックAramis wylerの提案、いように落ち#1です。
今、ジェイソンの応答が認められた。ることを考慮し使用した場合には、そのタイトル"という質問に対しての成績では虐待を選択します。Iップ皆様から示唆されるものを助けます。わからない場合と違いお客様の評判もよいと思ったのは嬉しいことだと思います。
再度、皆様、本当にありがとうございますのご支援をお願いごの編集など身近なものを用いての質問で落ちない適を目指して戦っていきたいと思い質問では英語が第二言語。
解決
あなたがビューにCASE / WHENロジックを移動させることができ、その後、ツールのクエリにビューを持っている?
他のヒント
あなたはすべての利用可能な組合を持っていますか?おそらく、あなたは、where句と組合それらを一緒inthe例の条件と条件のそれぞれについて、クエリを書くことができます。
カスタムサブクエリを書くことができますか?おそらくあなたも、CASEへのアクセス権を持っていないではない場合、これはおそらく、あまりにも動作します。
select
...,
coalesce(c1.value, c2.value, c3.value, ..., <default value>)
from MyTable
left join (select <result 1> as value) c1 on <first condition>
left join (select <result 2> as value) c2 on <second condition>
left join (select <result 3> as value) c3 on <third condition>
場合を用いた演算を実行する関数を記述します。
これは醜いだと値の数に応じて、あなたはそれが実行可能ではないかもしれない持っています。しかし、厳密に言えば、私はこのような何かが上記のクエリセグメントからの翻訳として働くだろうと思います:
テーブル名から 'PastDue' を選択今どこ()> TargetDateColumn及び(StatusColumn = '値1' 又はStatusColumn = '値2' またはStatusColumn = '値3') 組合は、次に()
私はあなたのコードを理解し、正確にわからないんだけど、これはあなたに別のアプローチのためのアイデアを与える必要があります。
まず、テーブルを作成します:
CREATE TABLE StatusLookup(
value nvarchar(255),
datesign shortint,
result varchar(255));
さて、真理値表を移入(ここで繰り返すロジックの多くを明らかに、多分これは、それらの間のJOIN CROSSを持つ2つの真理値表でなければなりません):
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 1', -1, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 1', 0, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 1', 1, 'Past Due')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 2', -1, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 2', 0, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 2', 1, 'Past Due')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 3', -1, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 3', 0, 'Outstanding')
INSERT INTO StatusLookup(value, datesign, result) VALUES ('Value 3', 1, 'Past Due')
最後に、参加して、デフォルトの回答を提供します:
SELECT mytable.*, COALESCE(statuslookup.result, 'Value 4')
FROM
mytable LEFT JOIN statuslookup ON
statuslookup.value = StatusColumn
AND statuslookup.datesign = Sign(Now()-TargetDateColumn)
このアプローチの重要な利点の1つは、それは多くの場合、より保守や拡張可能である、ないコード、データテーブル内のビジネスロジックを置くされます。