You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将SQL关联查询返回的两行结果合并为一行?

解决SQL查询两行合并为一行的问题

嘿,我来帮你搞定这个问题!你现在的查询返回两行,大概率是因为主表MasterData.CampaignImage里同一个CampaignId+ClientID组合下有多条记录,导致自连接后生成了重复行。想要把不同ImageTypeId的图片路径放在同一行的两个列里,有两种通用的解决方法:

方法一:条件聚合(通用所有SQL数据库)

这是最灵活且兼容性最好的写法,用CASE WHEN配合聚合函数实现行转列:

SELECT 
    CampaignId, 
    ClientID,
    MAX(CASE WHEN ImageTypeId = 1 THEN ImagePath END) AS Thumbnail,
    MAX(CASE WHEN ImageTypeId = 2 THEN ImagePath END) AS DetailImage
FROM MasterData.CampaignImage
GROUP BY CampaignId, ClientID

原理说明:

  • GROUP BY CampaignId, ClientID会把同一组(相同CampaignId和ClientID)的所有记录合并为一行
  • MAX(CASE ...)用来提取每组中对应ImageTypeIdImagePath(因为每组里每个ImageTypeId应该只有一条记录,用MIN也能达到同样效果)

方法二:使用PIVOT(适用于支持该语法的数据库,如SQL Server、Oracle)

如果你的数据库支持PIVOT语法,可以用更简洁的行转列写法:

SELECT 
    CampaignId, 
    ClientID,
    [1] AS Thumbnail,
    [2] AS DetailImage
FROM (
    -- 先筛选出需要的图片类型
    SELECT CampaignId, ClientID, ImageTypeId, ImagePath
    FROM MasterData.CampaignImage
    WHERE ImageTypeId IN (1, 2)
) AS SourceTable
PIVOT (
    -- 聚合函数用来获取对应路径
    MAX(ImagePath)
    -- 把ImageTypeId的行值转成列名
    FOR ImageTypeId IN ([1], [2])
) AS PivotTable

这两种方法都能确保每个CampaignId+ClientID组合只返回一行,正好满足你的需求!

内容的提问来源于stack exchange,提问作者0brine

火山引擎 最新活动