C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

列名のデータで取得する方法

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■90229 / inTopicNo.1)  列名のデータで取得する方法
  
□投稿者/ ルパン (26回)-(2019/02/18(Mon) 16:22:38)

分類:[.NET 全般] 

SQLServer で以下のように2つのテーブルがあるとき

NAME TANA NO
AA  A   N1
BB  A   N2
CC  B   N1

NAME N1 N2 N3
A   1 3 4
B   4 5 6

AA は TANA[A] の RETU[3] 番目
BB は TANA[A] の RETU[3] 番目
CC は TANA[B] の RETU[4] 番目

として以下のように取得することはできますか?
(列名がデータに入っていた場合にその列名のデータを取得できますか?)

NAME TANA RETU
AA  A   1
BB  A   3
CC  B   4




引用返信 編集キー/
■90232 / inTopicNo.2)  Re[1]: 列名のデータで取得する方法
□投稿者/ バーバル (1回)-(2019/02/18(Mon) 17:23:25)
以下のいずれかの方法はどうでしょうか。

(1)ストアドプロシージャを使って必要データをSELECTできるようにする。
(2)2番目のテーブルの[N1],[N2]...列のデータをすべて取得して、SQL呼び出し側言語で対象列のデータを判別する。

(2)の方が楽だと思いますが、どうでしょう。
引用返信 編集キー/
■90234 / inTopicNo.3)  Re[2]: 列名のデータで取得する方法
□投稿者/ kaina (46回)-(2019/02/18(Mon) 17:54:17)
そもそも2つ目のテーブルでRUTEを横展開で持つ必要はありますか?
以下のように縦展開に変更することが可能であれば、
楽になりますが、如何でしょうか?

NAME NO RUTE
A N1 1
A N2 3
A N3 4
B N1 4
B N2 5
B N3 6

この構成にした場合、以下のようにシンプルなSQLにすることが出来ます。

SELECT A.NAME, A.TANA, B.RUTE
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.NAME = B.NAME AND A.NO = B.NO

引用返信 編集キー/
■90236 / inTopicNo.4)  Re[3]: 列名のデータで取得する方法
□投稿者/ 氏 (2回)-(2019/02/18(Mon) 19:34:06)
基本はkainaさんの言う通り、正規化するのがいいでしょう。

その上で、どうしてもテーブル構成を変更できない場合は
UNPIVOTを使う方法があります。

https://rextester.com/XLXC60078
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ