• 締切済み

集計について

SQLの集計についての質問なのですが +--+---+ | id|num| +--+---+ | 1|  1| | 1|  2| | 2|  1| | 2|  2| | 2|  3| +--+---+ このようなデータを +---+---+ | id1| id2| +---+---+ |  2|  3| +---+---+ のようにid毎のnumの件数を1行で取得する事は出来ないでしょうか。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

過去にも同様の質問がかなりあります。 ・普通にSELECT文だけで取りたい  idの種類が分かっていればできます。  SELECT  SUM(CASE WHEN id=1 THEN 1 ELSE 0 END) id1,  SUM(CASE WHEN id=2 THEN 1 ELSE 0 END) id2,  FROM TABLE1  idの種類が分かっていなければできません。  理由は明らかで、普通のSELECT文は戻りのカラム(列)数を動的に変更できないからです。 ・動的クエリを使ってもよい  できます。  動的クエリというのは、変数を使ってSQL文を組み上げて実行する方法です。  DECLARE @sql varchar(max);  SELECT  @sql=ISNULL(@sql+',','')    +' SUM(CASE WHEN id='+CONVERT(varchar,id)+' THEN 1 ELSE 0 END)'    +' id'+CONVERT(varchar,id)  FROM TABLE1  GROUP BY id;  SET @sql='SELECT'+@sql+' FROM TABLE1';  EXEC (@sql);

関連するQ&A