お世話になります。以下のようにデータ検索するテクニックをご教授ください。
(1) 商品マスタ(商品コード、商品名)の状態
A,ラーメン
B,カツ丼
C,カレー
(2) 消費テーブル(氏名、商品コード)の状態
田中,A
田中,B
田中,C
林,B
これらのデータを元に以下のようにデータを取得。
A.氏名を「田中」で条件指定
→ 田中,ラーメン,カツ丼,カレー
B.氏名を「林」で条件指定
→ 林,カツ丼
ポイントは
(1)消費テーブルには、氏名ごとに複数レコード存在するが、それらを1レコードにまとめる
(2)条件に応じて、列数を動的に変える
表現が稚拙で恐縮ですが、よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
縦横変換でよくあるパターンですが、動的というのがどこまでかにもよります。
※無限というわけにはいきません。
単純なSQLですとCASE文とGroupByで対応可能ですが、あくまでCASE文を指定する数だけしか対応できません。
本当に不定(10や20ではきかない)ならは氏名でループして【商品コード】【商品名】を連結していく処理を実装したほうが良い気がします。
これをDBのストアドプロシージャでやらせるか、クライアント側でやらせるかは要件しだいです。
自分でなら配列を連結させるような共通関数を作ってクライアントでやらせます。
この回答への補足
3rd_001さん
早速のご回答ありがとうございました。
chukenkenkouさんの補足に記載させていただきましたが、
簡単な例をいただけると幸いです。よろしくお願いします。
No.2
- 回答日時:
SQL Serverのバージョンは?
列数を可変というのが、実際に最大何列くらいになるのかにもよりますが。
ぱっと思いついたままを書くと、
(1)最大列数を固定にし、くっつける行がない場合は、''(長さが0の文字)をくっつけるといった方法を使えば、シンプルに実現できるかも知れません。
(2)いろいろな要件を満たすには、ストアドプロシジャでやる
(3)可能な限り「SQLだけ」で実現したいなら、SQL Server 2005以降であれば、WITH句で再帰クエリを行いながら、列値を連結していくといった方法も考えられます。
この回答への補足
3rd_001さん、chukenkenkouさん
早速のご回答ありがとうございました。
SQLServerのバージョンは 2008で、最大列数は10程度を想定しています。
出来るのであればテーブル型関数で実装して、呼び出し側からはシンプルに
SELECT * FROM function_name(氏名)
を発行することで、可変の列数を取得したい、と考えています。
まあ、要件が満たせられればテーブル型関数には拘りませんが・・・
いろいろなご提案をいただき、ありがとうございます。
上述の要件を満たすには、どのチョイスが実装し易そうでしょうか。
(技術レベルが低くて恐縮です。簡単な例をいただけると助かります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) 重複データの抽出について 2 2023/07/21 14:52
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
このQ&Aを見た人はこんなQ&Aも見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
SQLで列名を変数にできないでしょうか
SQL Server
-
列名に変数を使うことはできないのでしょうか?
SQL Server
-
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
-
4
クロス集計で、列を動的に
SQL Server
-
5
列番号による項目の取得について
SQL Server
-
6
行と列の入れ替え検索(行は可変で項目を固定にしたい)のSQL文が出来な
MySQL
-
7
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
8
テーブルの列数を調べたい
MySQL
-
9
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
10
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
11
FROM の中で CASE を使えるでしょうか
SQL Server
-
12
SQLサーバから、項目の属性(型)を取得したいのですが・・・
SQL Server
-
13
ビューで引数を使いたい
SQL Server
-
14
select文の実行結果に空白行を入れたい
MySQL
-
15
データベースのINT型項目にNULLはNG?
MySQL
-
16
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
-
17
可変個数のデータはどう納める?
その他(データベース)
-
18
GROUP BYを行った後に結合したい。
Oracle
-
19
動的に生成したカラムを使ったFUNCTION
PostgreSQL
-
20
SQL文で右から1文字だけ削除するやり方
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
列が255以上のCSVファイルをAcc...
-
ACCESS 複数テーブル・複数フィ...
-
検索結果の列数を動的に変更したい
-
Access レコードを追加できませ...
-
INSERT文で発行したオートナン...
-
CLOB型へのINSERT
-
異なるスキーマからデータを抽...
-
特定のスキーマのテーブルを一...
-
(ACCESS)複数mdbからのデータ...
-
ORA-00959: 表領域'****'は...
-
データを削除しても表領域の使...
-
count(1)とcount(*)の違い
-
ACCESS テーブルに2行目から取...
-
viewのバックアップ
-
テーブルからのselectにおいて...
-
DELETE文でFROM句を省略した場合
-
オラクルのビューの存在について
-
select insert 句
-
表領域の違うEXPORT IMPORT
-
Access2019でフォームから入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数テーブル・複数フィ...
-
Access レコードを追加できませ...
-
検索結果の列数を動的に変更したい
-
【Access】外部結合を行う前に...
-
AccessのInsertクエリのあとつ...
-
INSERT文で発行したオートナン...
-
Accessで、マスター情報を参照...
-
複数あるAccessのテーブルを一...
-
ACCESSでの文字列の比較
-
AS/400のDBについて
-
データベースの正規化について
-
複数テーブルをひとつのテーブ...
-
Access2002 マスタテーブル変更...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
異なるスキーマからデータを抽...
-
CLOB型へのINSERT
-
datapumpの実行方法について
-
Data Pump で大量データインポ...
-
DELETE文でFROM句を省略した場合
おすすめ情報