SQL Server2008データの抽出方法
- 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
- aleister
- お礼率6% (10/148)
- SQL Server
- 回答数1
- ありがとう数1
- みんなの回答 (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
関連する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 よろしく御願いします。
- ベストアンサー
- Oracle
- 特定のレコードの抽出方法について
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 どうぞよろしくお願いいたします。
- ベストアンサー
- Oracle
- グループ中のデータ抽出について
以下の様のデータがあり、項目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 ← ★
- ベストアンサー
- SE・インフラ・Webエンジニア
- こういうビューを抽出したいのですが...
こういうビューを抽出する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文だけで記述できるのでしょうか? どのように記述すれば良いでしょうか?
- ベストアンサー
- SQL Server
- 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("*****") しているのはなぜでしょうか。
- ベストアンサー
- Visual Basic
- 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つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。
- 締切済み
- その他MS Office製品
- 別テーブルの抽出方法について
初心者質問で恐縮なのですが、 テーブルAを正規化してテーブルBを作成したとします。 さらにテーブルBを正規化し、テーブルCを作成します。 そこで、そのテーブルA、B、Cからあるレコード1つ抽出するにはどのようなSQL文を書けば抽出できますでしょうか。 また、テーブルに外部キー制約などを用いてリレーショナル関係を築いた場合、そのメリットは更新、削除等で他のレコードと間違えないことであるということの他になにかありますでしょうか? ご存知の方、宜しくお願いします。
- 締切済み
- MySQL
お礼
ありがとうございます。 助かりました