
お世話になります。以下のようにデータ検索するテクニックをご教授ください。
(1) 商品マスタ(商品コード、商品名)の状態
A,ラーメン
B,カツ丼
C,カレー
(2) 消費テーブル(氏名、商品コード)の状態
田中,A
田中,B
田中,C
林,B
これらのデータを元に以下のようにデータを取得。
A.氏名を「田中」で条件指定
→ 田中,ラーメン,カツ丼,カレー
B.氏名を「林」で条件指定
→ 林,カツ丼
ポイントは
(1)消費テーブルには、氏名ごとに複数レコード存在するが、それらを1レコードにまとめる
(2)条件に応じて、列数を動的に変える
表現が稚拙で恐縮ですが、よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
SQL Serverのバージョンは?
列数を可変というのが、実際に最大何列くらいになるのかにもよりますが。
ぱっと思いついたままを書くと、
(1)最大列数を固定にし、くっつける行がない場合は、''(長さが0の文字)をくっつけるといった方法を使えば、シンプルに実現できるかも知れません。
(2)いろいろな要件を満たすには、ストアドプロシジャでやる
(3)可能な限り「SQLだけ」で実現したいなら、SQL Server 2005以降であれば、WITH句で再帰クエリを行いながら、列値を連結していくといった方法も考えられます。
この回答への補足
3rd_001さん、chukenkenkouさん
早速のご回答ありがとうございました。
SQLServerのバージョンは 2008で、最大列数は10程度を想定しています。
出来るのであればテーブル型関数で実装して、呼び出し側からはシンプルに
SELECT * FROM function_name(氏名)
を発行することで、可変の列数を取得したい、と考えています。
まあ、要件が満たせられればテーブル型関数には拘りませんが・・・
いろいろなご提案をいただき、ありがとうございます。
上述の要件を満たすには、どのチョイスが実装し易そうでしょうか。
(技術レベルが低くて恐縮です。簡単な例をいただけると助かります)
No.1
- 回答日時:
縦横変換でよくあるパターンですが、動的というのがどこまでかにもよります。
※無限というわけにはいきません。
単純なSQLですとCASE文とGroupByで対応可能ですが、あくまでCASE文を指定する数だけしか対応できません。
本当に不定(10や20ではきかない)ならは氏名でループして【商品コード】【商品名】を連結していく処理を実装したほうが良い気がします。
これをDBのストアドプロシージャでやらせるか、クライアント側でやらせるかは要件しだいです。
自分でなら配列を連結させるような共通関数を作ってクライアントでやらせます。
この回答への補足
3rd_001さん
早速のご回答ありがとうございました。
chukenkenkouさんの補足に記載させていただきましたが、
簡単な例をいただけると幸いです。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SQLで列名を変数にできないでしょうか
SQL Server
-
列名に変数を使うことはできないのでしょうか?
SQL Server
-
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
-
4
可変個数のデータはどう納める?
その他(データベース)
-
5
クロス集計で、列を動的に
SQL Server
-
6
【PL/SQL】FROM区に変数を使う方法
Oracle
-
7
ビューで引数を使いたい
SQL Server
-
8
select文の実行結果に空白行を入れたい
MySQL
-
9
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
10
Oracle 2つのDate型の値の差を「分」で取得したい
その他(データベース)
-
11
Viewにインデックスは張れますか?
Oracle
-
12
SQLServer2005のSQL文での別名の取り扱い
SQL Server
-
13
SELECTで1件のみ取得するには?
Oracle
-
14
sqlserverにはグループ集計のfirstとlastがありません??
SQL Server
-
15
【Transact-sql】 execの結果をoutputパラメータに持たせたい
SQL Server
-
16
SQL 複数テーブルのupdate
Oracle
-
17
変数が選択リストにありません
Oracle
-
18
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlserverで集計結果をUPDATEし...
-
SQLCMDにて教えていただきたい...
-
sqlserverで同一キー単位で金額...
-
Wacom Cintiq 16 と Wacom Cint...
-
SQL Server management studio ...
-
自己相関サブクエリと自己結合...
-
SQLの副問い合わせ IN演算子とE...
-
SQLサーバー接続 特定のPCがWin...
-
Sheet1$が存在致しませんとエラー
-
Microsoft SQL Serverについて
-
SQLをはじめから勉強するには
-
SQL クエリ データ数
-
Tverは無料でしょうか?
-
サーバー破壊
-
Visuaal Studio Community 2022...
-
Access2021 「ISNULL関数には引...
-
甘いものがすきなのってなおせ...
-
SQLて何ですか!
-
生え際から顎先まで17.5 頭頂か...
-
sql serveについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数テーブル・複数フィ...
-
Access レコードを追加できませ...
-
列が255以上のCSVファイルをAcc...
-
検索結果の列数を動的に変更したい
-
INSERT文で発行したオートナン...
-
excel2013のテーブルについて
-
【Access】外部結合を行う前に...
-
Access コンボボックスを使った...
-
AccessのInsertクエリのあとつ...
-
Accessで、マスター情報を参照...
-
複数テーブルをひとつのテーブ...
-
アクセスでフォームに追加項目...
-
複数あるAccessのテーブルを一...
-
売価変更がある商品の売上金額
-
コンボボックスの2段階絞込み
-
ACCESSでの文字列の比較
-
コンボボックスの表示について
-
Accessのテーブル内の文字の置...
-
出勤管理のデータベース設計
-
検索フォームで検索するものが...
おすすめ情報