1

我有看起来像这样的 SQL 表

姓名 | 领域 | 价值 |


约翰 | 国家 | 美国 |
约翰 | 城市 | 纽约 |
约翰 | 街道 | 第五大道 |
迈克 | 国家 | 英国 |
迈克 | 城市 | 伦敦 |
迈克 | 街道 | 素里街|
蒂姆 | 国家 | 加拿大 |
蒂姆 | 城市 | 蒙特利尔 |

我需要的是根据名称对其进行分组并像这样合并成行(每个名称1行)

| 姓名 | 国家 | 城市 | 街道 |


| 约翰 | 美国 | 纽约 | 第五大道 |
| 迈克 | 英国 | 伦敦 | 素里街|
| 蒂姆 | 加拿大 | 蒙特利尔 | 空 |

有谁知道如何实现这样的事情?

编辑:字段计数是动态的。用户可以添加其他字段类型,例如 GUI 中的 ZIP,它应该会自动反映在查询中。

非常感谢您!彼得

4

1 回答 1

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)       ║
╚══════╩═════════╩══════════╩══════════════╝
于 2013-05-16T08:26:49.190 回答