- - PR -
列を行にしてデータを取得したい
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-22 23:56
DB:SQLServer2005
こちらでははじめましてです。 現在SQLserver2005を使用して開発を行っているものです、 同じ属性([カラム名][型][長さ][主キー])を持つテーブルAとテーブルBが存在します。 このテーブルのデータを列を行にして表示したいと思っております。 ↓の様な感じです。
※取得の際には必ず、キーを指定し、 テーブルA,テーブルBのレコードはユニークになります。 (ただし、テーブルBにレコードがない場合もあります。) のように表示したいのですが、 このように表示するには一列一列CASE文等で 定義してあげるしかないのでしょうか? UNPIVOT等を使用して出来ればよいなとおもったのですが、 参考サイトなどを見てもいまいち記述方法がわかりません。 もし、参考になりそうなサイト、記述方法のわかる方がいらっしゃたら ご教授いただけないでしょうか? よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-08-23 09:14
たぶん1列ずつ切り出して、UNIONでつなげるしかないかと。
#私の脳ではここまでが限界っと | ||||||||||||||||
|
投稿日時: 2006-08-23 10:15
かずくん様
早速のレスありがとうございます。
やはりそうですか… 列数がかなり多いので、 出来れば一発のクエリかビューなどで出来たら 楽&安全かと思ったのですが… ありがとうございます! | ||||||||||||||||
|
投稿日時: 2006-08-24 01:20
UNPIVOT(PIVOTも)SQLServer2005からの機能で
使った経験がある人は少ないかもしれませんね。 でUNPIVOTを使ってglasscoさんが望むものはできる気がします。 まず、1つだけをUNPIVOTしてみます。 #対象テーブル名=TestUP #列名 key,val1,val2がそれぞれキー、値1、値2に該当します。
これで取得される結果は以下のようになります。
colName に UNPIVOT〜以下にある colName in ( [key], val1, val2)で指定したものの列名が入っています。 valdataにcolNameで指定した列にあるデータが入っています。 これを同様にもう1つのテーブルに対しても行い、 colNameが一致するものをつき合わせたら(colNameが等しいものをJOINしたら)、 ご希望の結果が取得されると思います。 SQLだとこんな感じになると思います。
#JOINした実行結果を載せ忘れのたで、編集追記しました。 [ メッセージ編集済み 編集者: 夏椰 編集日時 2006-08-24 01:22 ] | ||||||||||||||||
1
