- - PR -
ORDER BY句にはCASEが使えますか?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-07 11:01
お世話になっております。
指定した条件でSELECTしたレコードを並べ替えたいですが、ORDER BY句にCASEを使う手を考えました。 SELECT ... FROM ... WHERE ... ORDERBY CASE CONDITION WHEN 1 THEN TBL1.COL1 WHEN 2 THEN TBL2.COL2 WHEN 3 THEN TBL3.COL3 ... END ここで、質問ですが、上記の使い方は大丈夫でしょうか? 後、実行してみたのですが、なぜか下記の書き方でないと、エラーが発生します。 CASE CONDITION WHEN 1 THEN TBL1.COL1 WHEN 2 THEN 'TBL2.COL2' WHEN 3 THEN 'TBL3.COL3' ... END CASE 1の場合「'」付けではしけないようですが。 あと、WHERE句にIF文を使えますか? 以上、ご教授お願いいたします。 | ||||
|
投稿日時: 2004-10-07 13:29
お世話になっっております。
自己レスです。先ほどのORDER BYではCASEが使えるみたいです。 ただ、「'」をつかるかどうかはColumnの型に関係しています。「DateTime」なら、 「'」が必要です。 以上、よろしくお願いします。 | ||||
|
投稿日時: 2004-10-07 13:45
って、これだと、TBL2.COL2 っていう文字列をソートに使っていることになりませんか? 当方でも試したところ、データ型の不一致エラーが発生したので、たとえばOracleなら ... WHEN 2 THEN TO_CHAR(TBL1.COL2, 'YYYYMMDD') ... とかで型をあわせてやる必要があるのでは。 | ||||
|
投稿日時: 2004-10-07 15:35
お世話になっております。
こちらの動作環境はMSDE2000です。実現したいのは、StoredProcedureの引数として渡されたCondition値に応じて、適するColの値で並べ替えたい。 実際に動かして見る限り、以下の特例を除き、殆どの場合Column名と'Column'両方が使えます。 1.CASEの一番目は''を付けてはならない 2.Columnの型はDATETIMEの時、Column名そのまま使えない 確かにご指摘を受けたとおり、TBL2.Col2っていう文字列を使った感じですが、結果が正しいですね。 CAST ('TBL2.Col2' AS varchar)でもうまく出来ましたので、これでいかがでしょう? それとも、StoredProcedureの引数でSQL文を動的に構成する方法はあまり推奨されていませんか? 以上、よろしくお願いいたします。 |
1