- ベストアンサー
FROM の中で CASE を使えるでしょうか
http://msdn.microsoft.com/ja-jp/library/ms181765.aspx …などを見ますと、どうもできそうに無いと思いますが、質問させて頂きます。 例えば、 SELECT * FROM (CASE WHEN @FLG=0 THEN t当月集計 ELSE t累積集計 END) AS t請求残 …のように、FROMの中でCASEが使えると便利なときがあります。 エラーが出ますが、このような書き方はできないのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CASE式でテーブルを切り替えることのできるDBMSはないと思います。 そのためにOracleでもSQL Serverでも苦労して動的クエリを書くのです。 SET @sql='SELECT * FROM '+CASE WHEN @FLG=0 THEN 't当月集計' ELSE 't累積集計' END+' AS t請求残' EXEC (@sql)
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
わざわざ性能が出しにくかったり、分かりにくいSQLにしたいのでしょうか? RDBMSは、ここのカテゴリ通りSQL Serverですか? バージョンは? SQL Serverであれば、T-SQLのIF文で制御すればいいのでは? <例1> declare @flag int; set @flag=1; if @flag=1 select * from t1 else if @flag=2 select * from t2 ; また、SQL Server以外といったことがあるなら、unionを使うといった方法もあります。 <例2> declare @flag int; set @flag=1; select * from t1 where @flag=1 union select * from t2 where @flag=2 ;
お礼
代替案ではなく、質問に直接答えて頂きたいところでした。
補足
>わざわざ性能が出しにくかったり、分かりにくいSQLにしたいのでしょうか? もちろん、そんなことはありません。 また、例にあげていただいている二つの書き方があることは、勿論存じております。そこを、敢えて質問なので御座居ます。例ではSELECT * ですが、列を列挙しているような場合、スクリプトの量では2倍程度になってしまいますよね。 RDBMSは、ここのカテゴリ通りSQL Serverです。 バージョンは、2000,2005,2008を考えています。