- PR -

【SQLServer】ASで指定した項目名を GROUPBYで使用する方法

1
投稿者投稿内容
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2008-04-24 13:44
いつもお世話になります。
なんとか過去ログからと思って探したて見たのですが、
見つける事が出来なかったので新たに投稿させていただきました。
もし同じ内容がログにありましたら申し訳ありません。

タイトルどおりなのですが

Select (Case文などの式) AS NameA FROM・・・

という風に名前をつけた項目をGROUP BY に使用したい場合、
ASで指定した名前をそのまま使用するとエラーになりますよね。。。

今まではその場合  (Case文などの式) をそのままGROUP BYに使用していたのですが、
他の人が作ったソースで何らかの方法でその名前を使っていたのを目にしたことがあるのです。

その時は「へえ、こうやったら出来るんだぁ」と、記憶したつもりだったのですが、
いざ使ってみようとしたら、その方法が思い出せません。

もしかしたら ORDER BYだったかもしれません
(それだったら普通に出来ますよね?)

と言うぐらい記憶があやふやで申し訳ないのですが、
もし実際に AS で指定した名前をGROUP BY に使用する方法があれば、
教えていただけないでしょうか。

当方使用DBはSQLServer2005 です。

何卒よろしくお願い致します。


よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-04-25 12:35
こんにちは。

SELECT
w.NameA
FROM
(
Select (Case文などの式) AS NameA FROM・・・
) w
GROUP BY
w.NameA

じゃだめですか?
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2008-05-13 13:56
よっしーさん、ご回答有難うございます。
返信が遅れて申し訳ありませんでした。

当日回答がなかったのであきらめてしまい、
その後見ていませんでした・・・。

確かに、Case文の項目のSelect文をテーブルに
してしまえば("副問い合わせ"であってますか?)
いけますね・・・。

直接はやはり無理と言うことでしょうか・・・。
有難うございました。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2008-05-13 19:28
MySQLなら、拡張しているので列別名が使えます。

コード:
select ID as AAAA,Sum(Val)
from (select 1 as ID,100 as Val from dual union all
      select 1 as ID,100 as Val from dual union all
      select 1 as ID,100 as Val from dual) dummy
  group by AAAA;



Oracleでは文法エラーですし、
SQLServerでも文法エラーです。

DB2とpostgreSQLは知りません
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-05-13 19:47
おっ、面白い。

引用:

明智重蔵さんの書き込み (2008-05-13 19:28) より:
DB2とpostgreSQLは知りません



DB2は文法エラー。

PostgreSQLは列別名をサポートしているどころか、ORDER BYで使えるような列位置までサポートしています。
http://www.postgresql.jp/document/pg831doc/html/sql-select.html#AEN60141
こりゃ便利だ。プログラムの中では使わないけど。

お、列位置はMySQLでも使えるようですね。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-05-13 21:36
引用:

reikoさんの書き込み (2008-05-13 13:56) より:
当日回答がなかったのであきらめてしまい、
その後見ていませんでした・・・。



1日くらい待とうよ。。
1

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