プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
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で指定したいのですが・・・。

A 回答 (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で使うことができます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A