• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1キー複数レコード抽出)

キー複数レコード抽出の方法とは?

このQ&Aのポイント
  • キー複数レコード抽出とは、一つのIDに対して複数のレコードを集約して抽出する方法のことです。
  • 例えば、IDが1の場合には、200804から200903までの日付に対して0のCNTを設定したレコードを作成し、それ以外のレコードは元のデータを保持します。
  • このようにして、特定のキーに対して複数のレコードを持つデータを一つのキーにまとめることができます。

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

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

1クエリで実現する場合、残念ながら期間は汎用的にはつくれませんが、以下のクエリで可能です。 (ご覧の通り、年部分はあらかじめ固定にする必要があります) SELECT i.ID, (y.YYYY+m.MM) DATE, ISNULL(t.CNT,0) CNT FROM (SELECT '2008' YYYY UNION ALL SELECT '2009') y CROSS JOIN (SELECT '01' MM UNION ALL SELECT '02' MM UNION ALL SELECT '03' MM UNION ALL SELECT '04' MM UNION ALL SELECT '05' MM UNION ALL SELECT '06' MM UNION ALL SELECT '07' MM UNION ALL SELECT '08' MM UNION ALL SELECT '09' MM UNION ALL SELECT '10' MM UNION ALL SELECT '11' MM UNION ALL SELECT '12' MM) m CROSS JOIN (SELECT DISTINCT ID FROM TBLA) i LEFT OUTER JOIN TBLA t ON i.ID=t.ID AND t.DATE=(y.YYYY+m.MM) WHERE (y.YYYY+m.MM) BETWEEN '200804' AND '200903' 純粋にデータの中身により増幅する汎用的なものにするためには、以下のいずれかが必要です。 ・'1980'~'2050'など、あらかじめ十分な期間の年数を保持した年テーブルを準備する  (単なる1~100などの番号テーブルでも可) ・Transact-SQLを利用する 前者の場合は、そのままyの部分置き換えてやればよいですし、後者の場合は年テーブルを テーブル変数として生成する処理を先に実行します。

aleister
質問者

お礼

ありがとうございます なんとかできそうです

関連するQ&A