2013-10-23 16 views
0

我的数据是这样的:SQL插入的行,列

ID (UID), EID (ID of record), Name (Name of meta-field), Value (value of meta-field) 

- 1,1,Name,A 
- 2,1,Note,B 
- 3,1,Additional,C 
- 4,2,Name,Z 
- 5,2,Note,Z 
- 6,2,Additional,Z 
- 7,3,Name,RICE 
- 8,3,Note,DICE 
- 9,3,Additional,MICE 

我需要一个选择(视图),看起来像这样:

EID, Name, Note, Additional 

- 1,A,B,C 
- 2,Z,Z,Z 
- 3,Rice,Dice,Mice 

我尝试了几种选择,但不能似乎得到它,或找到一个合适的答案,帮助,任何帮助将不胜感激。

+4

请注明您通过添加适当的标记(Oracle,SQL Server,MySQL等)来定位RDBMS。可能会有利用不被普遍支持的语言或产品功能的答案。此外,通过使用特定的RDBMS标记它,您的问题可能会得到更适合回答的人的关注。 – Taryn

+1

它会一直只有三个具有特定名称的列吗? –

回答

0

这对我的作品(sqlFiddle

SELECT t.EID, tname.Value Name, tnote.Value Note, tadd.Value Additional 
    FROM Table1 t 
    INNER JOIN Table1 tname ON tname.Name = "Name" AND tname.EID = t.EID 
    INNER JOIN Table1 tnote ON tnote.Name = "Note" AND tnote.EID = t.EID 
    INNER JOIN Table1 tadd ON tadd.Name = "Additional" AND tadd.EID = t.EID 
GROUP BY t.EID 

因为回答这个我已经获得更多的SQL知识比MySQL变种等。这将是MS SQL-Server中的(更优雅)解决方案:

select * from (
    select EID, Name as Col, Value from Table1 
) p 
pivot (
    min(Value) 
    for Col in (Name, Note, Additional) 
) pvt 

(请注意,别名NameCol是必要的,因为它会随着转动结果Name列冲突)