2011-07-28 13 views
0

みましょうを言った:TSQLピボット変換行フィールド - >私は次のようなデータを持っている列

ID   Key  String  Number 

1   Name  A    -1 
1   Age  ''   30 
1   Sex  Male   -1 
2   Name  B    -1 
2   Age  ''   20 
2   Sex  Female  -1 

我々は次のようなデータに

ID   Name  Age   Sex 
1   A   30   Male 
2   B   20   Female 

どれが認識されるであろうことができますを生成するためにピボットを使用できるかどうか、私は疑問に思います!あなたは予想通り

答えて

1

これを行うために容易になるかもしれませんか?

SELECT id 
,MAX(CASE WHEN Key = 'Name' THEN string END) as name 
,MAX(CASE WHEN Key = 'Age' THEN number END) as age 
,MAX(CASE WHEN Key = 'sex' THEN string END) as sex 
FROM table 
GROUP BY id 
1
DECLARE @dat TABLE (
id int, 
name varchar(50), 
string varchar(50), 
number int 
) 

DECLARE @dat2 TABLE (
id int, 
name_col varchar(50), 
val varchar(50) 
) 

INSERT INTO @dat (id, name, string, number) VALUES (1,'Name', 'A', -1) 
INSERT INTO @dat (id, name, string, number) VALUES (1,'Age', '', 30) 
INSERT INTO @dat (id, name, string, number) VALUES (1,'Sex', 'Male', -1) 
INSERT INTO @dat (id, name, string, number) VALUES (2,'Name', 'A', -1) 
INSERT INTO @dat (id, name, string, number) VALUES (2,'Age', '', 20) 
INSERT INTO @dat (id, name, string, number) VALUES (2,'Sex', 'Female', -1) 

INSERT INTO @dat2 
SELECT [id], [name], [val] = CASE WHEN number = -1 THEN string ELSE 
CONVERT(varchar,number) END FROM @dat 

SELECT * FROM @dat2 
PIVOT 
(
    MAX(val) 
    FOR [name_col] IN ([Name],[Age],[Sex]) 
) 
AS p 

あなたは何かを得るだろう:

1 A 30 Male 
2 A 20 Female 
関連する問題