2014-01-24 31 views
1

我有一个像TSQL非规范化文本表中的值

UserID  Attribute  Value 
1   Name   Peter 
1   Sex   male 
1   Nationality UK 
2   Name   Sue 

一个表,需要像

UserId  Name Sex Nationality ..... 
1   Peter male Uk 
2   Sue ..... 

结果貌似交叉表 - 在MS Access,如果我拿第一的作品(价值) - 在T SQL我不能让它与价值作为文本字段

任何想法?

+2

'选择作为PIV *从表(([姓名],[性别],[国籍])枢轴分钟(用户ID),用于Atrrribute);按用户ID分组' –

+0

是的 - 但名称,性别,国籍是datadriven - 我不知道我拥有哪些属性 – user3231451

+0

@ vijaykumar-hadalgiv,不错的工作先生。以创纪录的时间打败我。 – 2014-01-24 09:56:24

回答

1
DECLARE @TABLE TABLE (UserID INT, Attribute VARCHAR(20),Value VARCHAR(20)) 
INSERT INTO @TABLE VALUES 
(1,'Name','Peter'), 
(1,'Sex','male'), 
(1,'Nationality','UK'), 
(2,'Name','Sue') 


SELECT * FROM @TABLE 
PIVOT (MAX(Value) 
     FOR Attribute 
     IN ([Name], [Sex], [Nationality]))P 

结果集

╔════════╦═══════╦══════╦═════════════╗ 
║ UserID ║ Name ║ Sex ║ Nationality ║ 
╠════════╬═══════╬══════╬═════════════╣ 
║  1 ║ Peter ║ male ║ UK   ║ 
║  2 ║ Sue ║ NULL ║ NULL  ║ 
╚════════╩═══════╩══════╩═════════════╝