ビューを抽出するためのSQL文を教えてください
- ビューを抽出するためのSQL文について教えてください。
- 具体的なテーブルの構造と抽出結果の例を示しながら、SELECT文の記述方法について説明してください。
- CodeBとNameが最大5回まで存在する抽出結果を得るためのSELECT文についても教えてください。
- ベストアンサー
こういうビューを抽出したいのですが...
こういうビューを抽出する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文だけで記述できるのでしょうか? どのように記述すれば良いでしょうか?
- koolism
- お礼率100% (4/4)
- SQL Server
- 回答数1
- ありがとう数3
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「CodeBとNameは1行に最大5回まで存在しうる」ので常に5セット(CodeB5,Name5まで)返していいということですよね。 SQL Server 2005以降であれば、以下のような書き方ができます。 SELECT ID, CodeA, MAX(CASE WHEN Seq=1 THEN CodeB END) CodeB1, MAX(CASE WHEN Seq=1 THEN Name END) Name1, MAX(CASE WHEN Seq=2 THEN CodeB END) CodeB2, MAX(CASE WHEN Seq=2 THEN Name END) Name2, MAX(CASE WHEN Seq=3 THEN CodeB END) CodeB3, MAX(CASE WHEN Seq=3 THEN Name END) Name3, MAX(CASE WHEN Seq=4 THEN CodeB END) CodeB4, MAX(CASE WHEN Seq=4 THEN Name END) Name4, MAX(CASE WHEN Seq=5 THEN CodeB END) CodeB5, MAX(CASE WHEN Seq=5 THEN Name END) Name5 FROM (SELECT a.ID,a.CodeA,b.CodeB,b.Name, ROW_NUMBER() OVER (PARTITION BY a.CodeA ORDER BY b.CodeB) Seq FROM TableA a INNER JOIN TableB b ON b.CodeA=a.CodeA) tmp GROUP BY ID,CodeA
関連するQ&A
- 不要なwhere文が混じった重複レコードのカウント
下記のSQL文があります。 tableA内で、tableA.id(A.id)は重複があります。 tableA内でのtableA.id(A.id)の重複レコード数をcount関数などでSELECTしたいのですが、 下記SQL文からどのように付け加えたらいいのか、お分かりの方いますでしょうか? SELECT A.id as id, A.xxx as xx, A.yyy as yy, B.zzz as zz FROM tableA A, tableB B WHERE A.id = B.id AND A.xxx = x AND A.yyy = y なお、「A.yyy = y」という条件は、tableA.idの重複レコード数をカウントする上で必要な条件なのですが、 「A.xxx = x」という条件は、tableA.idの重複レコード数をカウントする上で、不要な条件です。 以上、よろしくお願いいたします。
- ベストアンサー
- MySQL
- 並べ替えについて
仕事であるdbを使って集計をすることになったのですが、なにぶん初心者なので分りやすくdbを並べ替えたいのですが、うまくいきません。 たとえば 主キー ID code1 code2 222 33 あ B 222 33 う c 225 66 あ c 239 77 か B 239 77 う d となっているものをテーブルを 主キー ID codeA codeB codeC codeD 222 33 あ B う c 225 66 あ c 239 77 か B う d と別テーブルへ並べ替えたいのですが、どのように 書いたらいいものか・・・。 どなたか教えてくれませんでしょうか?
- ベストアンサー
- Visual Basic
- テーブルの並び替え
仕事であるdbを使って集計をすることになったのですが、なにぶん初心者なので分りやすくdbを並べ替えたいのですが、うまくいきません。 たとえば 主キー ID code1 code2 222 33 あ B 222 33 う c 225 66 あ c 239 77 か B 239 77 う d となっているものをテーブルを 主キー ID codeA codeB codeC codeD 222 33 あ B う c 225 66 あ c 239 77 か B う d と別テーブルへ並べ替えたいのですが、どのように 書いたらいいものか・・・。 どなたか教えてくれませんでしょうか?
- ベストアンサー
- その他(データベース)
- 2つのテーブルを結合する際にIDを割り当てたい
PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA | TableB id name time | name time : : : | C1 D2 101 A1 B1 | C2 D2 102 A2 B2 | : : 103 A3 B3 | C20 C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA TableB id name time name time : : : 101 A1 B1 102 A2 B2 103 A3 B3 104 C1 D1 105 C2 D2 : : : 123 C20 D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。
- ベストアンサー
- MySQL
- 表示されているレコードを1つ上にする
環境:ACCESS2003&XP Pro テーブルとそのテーブルをソースにしたクエリーを元に一覧形式のフォームを作成しています。以下のようなイメージです。 品名 仕様 数量 単価 合計 A xxx xxx xxx xxx ↑ b yyy yyy yyy yyy ↑ C zzz zzz zzz zzz ↑ *↑はボタン 上記の表示で↑ボタンをクリックすると 表示されたレコードがひとつ上に行く方法が わかりません。 よろしくお願いします。 例:上記で品名bの↑ボタンをクリック 品名 仕様 数量 単価 合計 b yyy yyy yyy yyy ↑ A xxx xxx xxx xxx ↑ C zzz zzz zzz zzz ↑
- ベストアンサー
- その他(データベース)
- EXCEL 抽出について
EXCELで 必要な情報を抽出したいですが、 例: 表 ID 名前 1.XX小説 2.XXX本 3.ZZZ本 4.YYY本 1 山田 XX 1 1 2 鈴木 XX 1 1 3 渡辺 XXX 4 吉田 XX 1 1 こちらで 1~4まで本の名前で この本を持っていると1 持ってないと何もなしで、 下記のように抽出したいです。 結果: 1.XX小説 山田 XX 1.XX小説 吉田 XX 2.XXX本 鈴木 XX 3.ZZZ本 山田 XX 4.YYY本 鈴木 XX 4.YYY本 吉田 XX どのようにすればよいのでしょうか? 何かお分かりの方がいましたら教えてください。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- likeとjoinで詰まってます。助けてください。
ASP+SQLServerを使用することになりました。(どちらも不得意です) 簡単なことかもしれませんがよく分からず数日悩んだ末、混乱してきたので質問させて頂きます。 助言をお願いします。 tableAにはa,b,c,d,eの5つのカラムがあります。 1) hogeと言う文字列が含まれたデータをc,d,eの三つのカラムの中から抽出。 2) 更に、その抽出結果が含まれたデータをtableBのカラムfから抽出。 3) 最終的にtableA.a, tableA.b, tableA.c, tableB.fと言う一覧を出したい。 のですが思ったように行きません。 1)の3つ目のカラムをtableB.fとinner join出来たら良いのに。と思いますが 1)が含まれる文字列になるので上手く行きません。 分かり難い表現で申し訳ありません。助けてください。 宜しくお願いします。
- ベストアンサー
- Microsoft ASP
- 複数表からのカウント(2)教えてください
前回の質問と関連しますが 今度は複数の人について 以下のような処理を行うときのクエリーでうまくいか ないのですがどのようになおせばいいでしょうか。 よろしくお願いします <table A> n id name 1 1 yoshida 2 2 tanaka <table B> n id sub score 1 1 AAA 100 2 1 BBB 100 3 1 CCC 50 4 2 AAA 80 5 2 BBB 100 6 2 CCC 50 <result> name count yoshida 2 tanaka 1 tableAとtableBの2つの表があり tableAの2人(以上あり)のscoreが100である subの数をカウントしたい場合 SELECT tableA.name as Name, count(*) FROM tableA, TableB where(tableA.id = tableB.id and tableB.score = 100 )
- ベストアンサー
- MySQL
- SQLiteのUPDATE文を教えてください。
UPDATE tableA, tableB SET tableA.name = tableB.name WHERE tableA.id = tableB.id; 上記のSQLが他のデータベースでは動きますが、SQLiteでは動きません。 同意味のSQLはどう書くのでしょうか。お願いします。
- ベストアンサー
- その他(データベース)
- あいまい条件抽出についてのSQL文について
あいまい条件抽出についてのSQL文について hiroです。 SQL文について、教えてほしいのですが、 下記のようなDatabaseがあったとします。 tableA:カラムA:ABCDE,BCDEA tableB:カラムB:??C?? この場合、例えば、 SELECT * FROM DataBase WHERE tableA.カラムA like tableB.カラムB みたいな感じで、カラムAのABCDEだけを検索するような仕組みを作ることは 可能でしょうか? ※上のSQL文では引っ張れないのは理解できています。 わかる方がいらっしゃいましたら、SQL文を教えてください。 よろしくお願いします。 環境:Oracle 11g
- ベストアンサー
- Oracle
お礼
jamshid6様 ご回答ありがとうございます。 ROW_NUMBER 関数というものがあるんですね。 お蔭様で希望のデータを抽出することができました。 とても便利な機能で目から鱗モノです。 助かりました。 どうもありがとうございました。