• ベストアンサー

GROUP BY で列名は指定できないの?

いつもお世話になっております。 SQLで GROUP BY を使うときに SELECT部分で指定した 列名を指定したいことがよくあると思います。 列名を指定する方法はないのでしょうか? 例) SELECT 項目A, CASE WHEN 項目B = 1 THEN '○' WHEN 項目B IN (2,3) THEN '×' END AS 丸バツ, SUM(数量) FROM TABLE GROUP BY 項目A, 丸バツ こんな風にGROUP BYで指定したいのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

それ、使いたいですよね。でもSQL Serverでは使えないみたいです。 group byの中にcase...endを丸ごと書き入れれば同じことができるのですが、同じことを2回書かないといけないのは見た目が冗長なだけでなくメンテナンス性も下がりますし、なによりgroup byの中身がちょっとでも変わるとちゃんと文句を言う(つまり、2回とも本当に全く同じかどうか、SQL Serverはちゃんとチェックしている)というのが、釈然としないところです。別名を使わせてくれれば全部解決するのに。 なお、同じく若干冗長な表現になりますが、こういう書き方もできます。(SQL Server 2000以上。SQL Server 7.0だとどうかな・・・6.5以前では使えません。) select a, x from   (select a, case...end as x from table) as tablex   group by a, x こうすると、「カラムaとカラムxを持つ中間的なテーブルtablex」が外側のselectで仮定されるので、カラムxをgroup byで使うことができます。