2011-07-28 35 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