SQL SERVER 2005
Aのテーブルから
A1というビューを作成しました。
そのビューの内容というのは
AのテーブルのTOP4を
列に変換したいというものです。
例)
Aテーブル
(列名 AA AB AC)
AA1 AB1 AC1
AA2 AB2 AC2
AA3 AB3 AC3
AAビュー
AA_1 AB_1 AC_1 AA_2 AB_2 AC_2 AA_3 AB_3 AC_3
AA1 AB1 AC1 AA2 AB2 AC2 AA3 AB3 AC3
となるような、ビューのSQLがあれば、教えて頂きたく思います。
よろしくお願いします。
No.1
- 回答日時:
・TOP 4となっていますが、3つしかないのは3レコードしかないからですか?
・TOP 4はORDERがついていますか?それとも任意の先頭4レコードですか?
この回答への補足
すみません。
Aのテーブルには
その後、最初の3件と同じようなデータのレコードが続きます。
Aテーブル
(列名 AA AB AC)
AA1 AB1 AC1
AA2 AB2 AC2
AA3 AB3 AC3
・
・
・
AA100 AB100 AC100
・
・
・
という、感じです。
補足が中途半端でした。
すみません。
・TOP 4となっていますが、3つしかないのは3レコードしかないからですか?
⇒こちらについては補足で説明させて頂いたとおりですが、
実際には8件ほどしかなく、8件分を列にしたいと思っています。
(なので、細くのレコード数は多すぎです。)
・TOP 4はORDERがついていますか?それとも任意の先頭4レコードですか?
⇒ORDERはあります。
例には書き忘れていましたが、
Aのテーブルには別のアイデンティティのIDがあり、
それでソートしようとしています。
No.2
- 回答日時:
IDに抜けがないのであれば、以下のようにします。
SELECT
MAX(CASE WHEN ID=1 THEN AA END) AA_1,
MAX(CASE WHEN ID=1 THEN AB END) AB_1,
MAX(CASE WHEN ID=1 THEN AC END) AC_1,
MAX(CASE WHEN ID=2 THEN AA END) AA_2,
MAX(CASE WHEN ID=2 THEN AB END) AB_2,
MAX(CASE WHEN ID=2 THEN AC END) AC_2,
MAX(CASE WHEN ID=3 THEN AA END) AA_3,
MAX(CASE WHEN ID=3 THEN AB END) AB_3,
MAX(CASE WHEN ID=3 THEN AC END) AC_3,
MAX(CASE WHEN ID=4 THEN AA END) AA_4,
MAX(CASE WHEN ID=4 THEN AB END) AB_4,
MAX(CASE WHEN ID=4 THEN AC END) AC_4,
(以下同様)
FROM TABLE
IDに抜けがある可能性があるならば、以下のようにROW_NUMBERをつかって
行番号を生成した上で、同じようにします。
SELECT
MAX(CASE WHEN SEQ=1 THEN AA END) AA_1,
MAX(CASE WHEN SEQ=1 THEN AB END) AB_1,
MAX(CASE WHEN SEQ=1 THEN AC END) AC_1,
MAX(CASE WHEN SEQ=2 THEN AA END) AA_2,
MAX(CASE WHEN SEQ=2 THEN AB END) AB_2,
MAX(CASE WHEN SEQ=2 THEN AC END) AC_2,
MAX(CASE WHEN SEQ=3 THEN AA END) AA_3,
MAX(CASE WHEN SEQ=3 THEN AB END) AB_3,
MAX(CASE WHEN SEQ=3 THEN AC END) AC_3,
MAX(CASE WHEN SEQ=4 THEN AA END) AA_4,
MAX(CASE WHEN SEQ=4 THEN AB END) AB_4,
MAX(CASE WHEN SEQ=4 THEN AC END) AC_4,
(以下同様)
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY ID) SEQ,* FROM TABLE) t
ただし、もし、質問者さんが8行なら8×3=24列、100行なら100×3=300列
が返ってくるようなビューをイメージされているのであれば、それは不可能です(ビューの列数は固定です)。
どうしてもそのようなことをしたい場合は、ストアドプロシージャを使うことになります。
(ただし、ビューより結果の使い勝手は相当劣りますので、期待したものにはならないでしょう)
ありがとうございます。
ところで、回答の
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY ID) SEQ,* FROM TABLE) t
の、SEQの部分なのですが、
これはシステムの予約語でしょうか?
だとしたら、SQL SERVERに用意されているもなのでしょうか?
No.3ベストアンサー
- 回答日時:
>SELECT ROW_NUMBER() OVER (ORDER BY ID) SEQ,* FROM TABLE
ROW_NUMBERは分析関数と呼ばれますが、
「ROW_NUMBER () OVER (ORDER BY ID)」と書くことで、戻りのレコードをID別に並び替えた場合の連番を返してくれます。
これをメインのクエリで使うために、私が勝手に「SEQ」という名前をつけているとご理解ください。
自分の環境でも正常に動き、
期待していた結果となりました。
ご丁寧に答えてくださり、
ありがとうございました。
またのとき、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 政治 佐渡金山の推薦書不備に怒りの声……こういうのに、統一教会の意向を受けた売国議員が暗躍してませんか? 2 2022/07/31 19:18
- その他(ネットショッピング・通販・ECサイト) 骨伝導ヘッドセットで この二つは値段が違うだけでは同じですか? 1 2023/02/13 19:13
- 政治 「日本代表は勝っちゃうしで、残念というほかない」……日本共産党が隠してる本音でしょ? 8 2022/11/26 08:23
- 政治 立憲・泉代表「失礼な言葉」 二階氏の国葬欠席「賢くない」発言に反発 4 2022/09/16 20:57
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- ロック・パンク・メタル ジミ・ヘンドリックスのCD、レコード 1 2022/03/30 08:47
- 宗教学 公明・山口氏、悪質な勧誘に「制裁を考えなければ」……創価学会は大丈夫ですか? 2 2022/11/10 04:22
- マウス・キーボード Pc切替器が動作しません。理教えてください。よろしくお願いします。 4 2023/05/10 15:43
- 食べ物・食材 キノコ好きの皆様。キノコさんたちが仲間同士で会話をしているそうです。マジです 2 2022/05/18 17:52
- Excel(エクセル) EXCEL 行固定列移動 3 2022/04/04 09:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessにインポートしたら並び...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
ACCESSにて全項目(レポート)...
-
3つ以上のテーブルをUNIONする...
-
ACCESS 『DoCmd.OutputTo』に...
-
ACCESS【更新クエリの中断がで...
-
データの二重表示の原因
-
Access 1レコードずつcsvで出力...
-
XamppのMySQLへとレコードが登...
-
ACCESSのBookmarkプロパティの...
-
SELECT COUNT(*) について ( PHP )
-
SQLServerで同一条件レコードの...
-
(ACCESS)並び替えをしないで...
-
排他モードで開く場合は、どう...
-
アクセス重複データ
-
Access2007 削除クエリで複数テ...
-
カラム数が多いテーブルの速度
-
ManagementStudioからのデータ削除
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3つ以上のテーブルをUNIONする...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
Access VBA Me.Requery レコー...
-
ACCESSのBookmarkプロパティの...
-
Access 1レコードずつcsvで出力...
-
Access 削除クエリが重い
-
ManagementStudioからのデータ削除
-
SQLServerで同一条件レコードの...
-
非連結サブフォームのレコード...
-
Accessでレコードが更新された...
-
Accessでの排他制御
-
(ACCESS)並び替えをしないで...
-
Accessで重複したデータを一件...
-
Accessでの禁止文字チェック
-
Access カレントレコードがあり...
-
ACCESSファイルを開こうとする...
-
ACCESS【更新クエリの中断がで...
おすすめ情報