SQL Server2008データの抽出方法

このQ&Aのポイント
  • SQL Server2008を使用してデータを抽出する方法について解説します。
  • c1とc2が同じものをまとめて抽出するためのSQLの書き方を説明します。
  • 抽出結果はc1とc2ごとに合計値と内訳を表示します。
回答を見る
  • ベストアンサー

抽出方法

SQL Server2008を使用しています。 key c1 c2 k ------------ 1 01 01 100 2 01 01 200 3 01 02 120 4 01 02 150 5 01 02 200 上記のようなデータがあるとします。 c1,c2が同じものをまとめて1レコードとして 抽出したいと思っています。 c1,c2が同じものは最大5つまでです。 合計と内訳を下記のようにまとめて 抽出するにはどのようなSQLを記述すればよいでしょうか?    ↓↓↓    c1 c2 k1 k2 k3 k4 k5 k0 --------------------------- 01 01 100 200 0  0 0 300 01 02 120 150 200 0 0 470

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

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

ROW_NUMBERを使って先に「c1,c2内での連番」を振れば、あとは簡単です。 SELECT c1, c2, MAX(CASE WHEN SEQ=1 THEN k ELSE 0 END) k1, MAX(CASE WHEN SEQ=2 THEN k ELSE 0 END) k2, MAX(CASE WHEN SEQ=3 THEN k ELSE 0 END) k3, MAX(CASE WHEN SEQ=4 THEN k ELSE 0 END) k4, MAX(CASE WHEN SEQ=5 THEN k ELSE 0 END) k5, SUM(k) k0 FROM (SELECT ROW_NUMBER() OVER (PARTITION BY c1,c2 ORDER BY [KEY]) SEQ, * FROM TABLE1) t GROUP BY c1,c2

aleister
質問者

お礼

ありがとうございます。 助かりました

関連するQ&A

  • 同一データの抽出の方法について

    T1のレコードで同一の値を持つレコードを抽出したいのですがSQLが考え付きません。 ご協力願います。 ここで同一の値とはT2,T3の各サブテーブルの値の集合が一致するするものです。 下記のようなデータ例の場合、 T1のデータ1とデータ3が同一の値を持つレコードとなります。 Oracle 10を使ってます。PL・SQLでもかまいません。 T1 key データ -------------------- key1  データ1 key2  データ2 key3  データ3 T2 key value ------------------- key1 v11 key1 v12 key2 v21 key3 v11 key3 v12 T3 key value ------------------- key1 vv11 key1 vv12 key2 vv21 key2 vv22 key3 vv11 key3 vv12 よろしく御願いします。

  • 特定のレコードの抽出方法について

    AのSQLでヒットし、BのSQLでヒットしないレコードを抽出したいと思います。 イメージとしては、内線(tel)30..のみを使用している社員(employee)を抽出したいと思います。 【AのSQL(内線(tel)30..を使用している社員(employee))】 SELECT `employee` FROM `w_table` WHERE `tel` REGEXP '30..' 【AのSQLの結果】 employee 10001 10001 10002 10002 【BのSQL(内線(tel)30..以外を使用している社員(employee))】 ※※※1.ここの書き方が分かりません。※※※ 【BのSQLの結果】 employee 10001 10003 【CのSQL(AのSQLを満たし、BのSQLを満たさない社員)】 ※※※2.ここの書き方が分かりません。※※※ 【CのSQLの結果】 employee 10002 上記の場合、 社員番号10001は内線30..と内線30..以外を使用しています。 社員番号10002は内線30..のみを使用しています。 社員番号10003は内線30..以外を使用しています。 この場合、社員番号10002のみを抽出したいと思います。 その為、【CのSQL】を記述しようと思ったのですが、 どのように SQL 文を記述すればよいか分からなかったので、 記述方法についてアドバイスいただける方がいらっしゃいましたら、 ご教示の程、よろしくお願いします。 なお、【AのSQL】【BのSQL】を書かず、 直接【CのSQL】一回で済む物であれば非常に助かります。 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ある条件を持たないレコードの抽出

    下記のようなデータがあります。 col1 col2 ========== 001 AAA 001 BBB 001 CCC 002 AAA 002 CCC 003 BBB 003 CCC 004 AAA col2 にBBB を持たないレコードを抽出したいのですが どのようにSQLを記述すればよいかご教授ください。 得たい結果 002 004 どうぞよろしくお願いいたします。

  • SQL の抽出方法

    あるテーブルABC に項目aとbとc があるとします。 今、抽出の条件が 仮にa=1,b=2 として、 この条件で複数件のデータが抽出され その中からcが最大のデータ1件のみを抽出するとします。 このSQLを作成する場合、 どのような方法がありますでしょうか? select文で、1度cのmax値を求めないといけないでしょうか?

  • グループ中のデータ抽出について

    以下の様のデータがあり、項目Aが同一のグループで、項目Dの内容が’00’のデータが1件しかないものを抽出(以下★印のデータのみを抽出)するSQLを教示御願い致します。 項目A 項目B 項目C 項目D k1 01 S1 00 ← ★ k2 01 S2 00 k2 01 S3 00 k2 01 S4 00 k3 01 S5 00 ← ★ k3 01 S6 0A k3 02 S7 0A k4 01 S8 0B k4 02 S9 00 ← ★ k4 02 SA 0B k5 01 SB 0B k6 01 SC 00 k6 02 SD 00 k6 02 SE 00 k7 01 SF 0A k7 02 SG 00 ← ★ k7 02 SH 0C k8 01 SI 00 k8 03 SJ 00 k9 01 SL 00 k9 02 SM 00 k9 03 SN 00 kA 01 SO 0A kA 03 SP 00 ← ★

  • こういうビューを抽出したいのですが...

    こういうビューを抽出するSQLを書きたいのですが、わからず困っています。 TableA (主キー:ID)  ID│CodeA ──┼───── 0001│123 0002│234  :│: TableB (主キー:ID)  ID│CodeA │CodeB │Name ──┼───┼───┼───   1│123  │A1  │XXX   2│123  │B1  │YYY   3│123  │C1  │ZZZ 欲しい抽出結果 (CodeBとNameは1行に最大5回まで存在しうる)  ID│CodeA │CodeB1│Name1 │CodeB2│Name2 │CodeB3│Name3 ──┼───┼───┼───┼───┼───┼───┼─── 0001│123  │A1  │XXX  │B1  │YYY  │C1  │ZZZ こういうのってSELECT文だけで記述できるのでしょうか? どのように記述すれば良いでしょうか?

  • 2つの項目が重複するレコードを抽出する方法はありますか?

    MySQL4.1で既存データに対し複合キーを新しく設定したいのですが、 ALTER TABLE `test` ADD PRIMARY KEY (`a`,`b`) としても重複データが存在する為、作成できませんでした。 10万件あるテーブルから重複するレコードを手動で削除したいのですが、aとbが重複しているレコードだけ抽出するSQL文はありますでしょうか?

    • ベストアンサー
    • MySQL
  • ExcelVBAにて外部データ(*.csv)をSQL文を使って抽出する方法

    こんにちは VBAインポート問題で日々悩んでいるものです。 CSV形式のデータをODBCのシステムDSNに登録し、それをDAOでSQL要求しデータを抽出する方法がよくわかりません。 (1)データベースの定義記述内容 (2)レコードセットにSQL命令をかける記述 (3)抽出された内容をワークシートに貼る記述 等がよくわかりません。 DAOの場合、レコードセットを定義するのに set DB=DBEngine.OpenDatabase("******")があったり、なかったりする理由がわかりません。 突然、set rs = CurrentDb.OpenRecordset("*****") しているのはなぜでしょうか。

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

  • 別テーブルの抽出方法について

    初心者質問で恐縮なのですが、 テーブルAを正規化してテーブルBを作成したとします。 さらにテーブルBを正規化し、テーブルCを作成します。 そこで、そのテーブルA、B、Cからあるレコード1つ抽出するにはどのようなSQL文を書けば抽出できますでしょうか。 また、テーブルに外部キー制約などを用いてリレーショナル関係を築いた場合、そのメリットは更新、削除等で他のレコードと間違えないことであるということの他になにかありますでしょうか? ご存知の方、宜しくお願いします。