我有SQL表,看起来像这样
姓名|领域|价值|
约翰|国家|美国|
约翰|城市|纽约|
约翰|街|第五大道|
迈克|国家|英国|
迈克|城市|伦敦|
迈克|街| Surrey steet |
蒂姆|国家|加拿大|
蒂姆|城市|蒙特利尔|
我需要的是根据Name对它进行分组并合并成行(每个名称1行),如下所示
|名称|国家|城市|街|
|约翰|美国|纽约|第五大道|
|迈克|英国|伦敦|萨里街|
|蒂姆|加拿大|蒙特利尔|空|
有没有人知道如何实现这样的目标?
编辑:字段数是动态的。用户可以添加其他字段类型,例如GUI中的ZIP,它应该自动反映在查询中。
提前多多谢谢你! 彼得
答案 0 :(得分:2)
SELECT Name,
MAX(CASE WHEN field = 'Country' THEN value END) Country,
MAX(CASE WHEN field = 'City' THEN value END) City,
MAX(CASE WHEN field = 'Street' THEN value END) Street
FROM tableName
GROUP BY Name
使用PIVOT
函数
SELECT Name, Country, City, Street
FROM
(
SELECT Name, Field, Value
FROM TableName
) data
PIVOT
(
MAX(Value)
FOR Field IN (Country, City, Street)
) pvt
输出
╔══════╦═════════╦══════════╦══════════════╗
║ NAME ║ COUNTRY ║ CITY ║ STREET ║
╠══════╬═════════╬══════════╬══════════════╣
║ John ║ USA ║ New York ║ 5th avenue ║
║ Mike ║ UK ║ London ║ Surrey steet ║
║ Tim ║ Canada ║ Montreal ║ (null) ║
╚══════╩═════════╩══════════╩══════════════╝