• ベストアンサー

条件付GROUP BY句の記述方法

テーブルAには 列A 数値列 ID列(主キー) の 3つの列があるのですが このテーブルのデータを列AでGROUP BYする際 ID列のデータが5と10の物だけGROUP BYの 対象にしたいのですが そのまま流すとGROUP BYでIDが指定されてません、 HAVING句では無効です。 とメッセージが出ます、 かと言ってID列をGROUP BYすると 主キーなのでSUMが5と10の物に分かれてしまいます。 これはどのようにして回避すればいいのでしょうか? SELECT 列A,SUM(数値列) FROM テーブルA GROUP BY 列A HAVING ID列 IN (5,10) 環境 Win2000 SQLServer2000

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

  • ベストアンサー
  • sawagani
  • ベストアンサー率73% (19/26)
回答No.2

集計前に条件を絞り込むのであれば、WHEREを使います SELECT 列A,SUM(数値列) FROM テーブルA WHERE ID列 IN (5,10) GROUP BY 列A ちなみにHAVINGは、集計結果に対して絞込みを行うときに使います。 たとえば、集計結果が1000以上のものを取りたいときは、 SELECT 列A,SUM(数値列) FROM テーブルA GROUP BY 列A HAVING SUM(数値列) >= 1000 という具合です

noname#9122
質問者

お礼

集計前に条件を指定して実行するのですね HAVINGの使い方を勘違いしてました 回答有難う御座いました。

その他の回答 (1)

  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.1

SELECT 列A,SUM(数値列) FROM (SELECT * FROM テーブルA WHERE ID列 IN (5,10) ) GROUP BY 列A 試してないので間違ってたらすいません^^; 要求仕様をみていたら集計する前に条件を確定したいようなので、集計する前に条件指定してやればいいかと。

noname#9122
質問者

お礼

集計する前に対象データを指定しておく必要があったのですね 回答していただき有難う御座いました。