sql - SQL Server中如何合并不同的行?

标签 sql sql-server select group-by left-join

查询:

select 
    ag.AGENTID as AGENTID, ag.AGENTNAME as AGENTNAME,
    case when pc.CONTACTTYPECD='M' then pc.CONTACTNUM end as 'MOBILE',
    case when pc.CONTACTTYPECD='R' then pc.CONTACTNUM end as 'RESIDENCE',
    case when pc.CONTACTTYPECD='EM' then pc.CONTACTNUM end as 'EMERGENCY_NO'
from 
    AGENT ag 
left join 
    PARTY p on p.PARTYID = ag.PARTYID
left join  
    PARTYCONTACT pc on pc.PARTYSEQ = p.PARTYSEQ
where 
    ag.AGENTID = '10000005'

输出

enter image description here

预期输出
enter image description here

最佳答案

试试这个:

SELECT ag.AGENTID AS AGENTID, ag.AGENTNAME AS AGENTNAME,
       MAX(CASE WHEN pc.CONTACTTYPECD='M' THEN pc.CONTACTNUM END) AS 'MOBILE',
       MAX(CASE WHEN pc.CONTACTTYPECD='R' THEN pc.CONTACTNUM END) AS 'RESIDENCE',
       MAX(CASE WHEN pc.CONTACTTYPECD='EM' THEN pc.CONTACTNUM END) AS 'EMERGENCY_NO'
FROM AGENT ag 
LEFT JOIN PARTY p ON p.PARTYID = ag.PARTYID
LEFT JOIN PARTYCONTACT pc ON pc.PARTYSEQ = p.PARTYSEQ
WHERE ag.AGENTID = '10000005'
GROUP BY ag.AGENTID, ag.AGENTNAME

关于sql - SQL Server中如何合并不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503343/

相关文章:

sql-server - 将 CSV 导入 SQL Server 时无法在输入文件中找到模式

php - 将嵌套 sql SELECT 语句中的 SELECT 结果分配给变量 - PHP

mysql - 动态创建内联 SQL 表(用于排除左连接)

sql-server - 如何在 SQL 连接字符串中使用 Azure KeyVault secret ?

sql-server - 找不到文件 dacpac?

mysql - 在一列中显示数据库中的多个值

mysql - 使用通配符从列表中选择项目

sql - 可选的 where 子句取决于函数参数

mysql - 在 mysql 中每天删除除 max(timestamp) 之外的所有行

SQL:使用 OR 加入列