人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLについて(sql server)教えてください。

下記(1)のような商品とスペックを表わしたデータがあります。
商品のスペック毎に行が存在しています。

これを(2)のように商品毎に一行にまとめるためにはどのように記述すればいいのでしょうか?

(1)
商品ID,スペックID,スペック値
--------------------
1,sp1,10cm
1,sp2,15kg
1,sp3,89
2,sp3,34
3,sp1,12cm

(2)
商品ID,sp1,sp2,sp3
--------------------
1,10cm,15kg,89
2,,,34
3,12cm,,


●質問者: wakutan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:SQL Server スペック データ 存在 記述
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●27ポイント
SELECT 商品ID
 ,(SELECT TOP 1 スペック値 FROM 商品 WHERE 商品ID = T1.商品ID AND スペックID='sp1') AS sp1
 ,(SELECT TOP 1 スペック値 FROM 商品 WHERE 商品ID = T1.商品ID AND スペックID='sp2') AS sp2
 ,(SELECT TOP 1 スペック値 FROM 商品 WHERE 商品ID = T1.商品ID AND スペックID='sp3') AS sp3
FROM 商品 AS T1
GROUP BY 商品ID;

問題文からは重複は無いものと勝手に判断しておりますがどうでしょう?

重複があるようであれば、ストアドが得意な人からの

文字列加算を加えたクロス集計のものが回答されるのを願うばかりですが・・・

すみませんが上記、動作確認はしておりませんので、適宜修正をお願いいたします。

下記URLは余談です。

PIVOT と UNPIVOT の使用


2 ● chuken_kenkou
●27ポイント

SQL Serverのバージョンは、何でしょうか?

SQL Server 2005以降なら、PIVOT機能が実装されています。

PIVOT と UNPIVOT の使用



それより前のSQL Server、あるいは他のRDBMSでも応用できるSQLとしては次のような方法が

あります。

select
 商品ID,
 max(case スペックID when 'sp1' then スペック値 else null end) as "sp1",
 max(case スペックID when 'sp2' then スペック値 else null end) as "sp2",
 max(case スペックID when 'sp3' then スペック値 else null end) as "sp3"
 from t1
 group by 商品ID
 order by 商品ID

ここで、max関数を使っているのは、group byとの関連で文法上許される記述にするために指定

しており、今回の場合、min関数でも結果は同じです。インラインビューなどを使ってmax関数を

使用しないようにもできますが、記述が複雑になってきます。


3 ● beatgoeson
●26ポイント

http://www.yahoo.co.jp/

URLはダミーです。


このテーブルを[syouhin]、スペックIDはsp3までしかないと仮定。

select

rtrim(s0.[商品ID]) + ',' + rtrim(isnull(s1.[スペック値],'')) + ',' + rtrim(isnull(s2.[スペック値],'')) + ',' + rtrim(isnull(s3.[スペック値],''))

from

( select distinct [商品ID] from syouhin ) s0,

( select [商品ID],[スペック値] from syouhin where [スペックID]='sp1') s1,

( select [商品ID],[スペック値] from syouhin where [スペックID]='sp2') s2,

( select [商品ID],[スペック値] from syouhin where [スペックID]='sp3') s3

where

s0.[商品ID] *= s1.[商品ID] and

s0.[商品ID] *= s2.[商品ID] and

s0.[商品ID] *= s3.[商品ID]

でいかがでしょう。実際に検証もしてみました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ