You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并重复行并基于单列生成多列,实现跨源账户代码一致性识别

问题

我需要合并不同来源的账户列表,识别哪些账户代码在各来源中的设置是一致的。

当前使用的SQL代码
SELECT
    Distinct a.MainCode,
    a.Type,
    a.Group,
    a.InternalCode
FROM 700_AccountTable a
Left join 700_AccountDetail b
    on a.MainCode = b.MainCode
Left join 700_AccountHistory c
    on a.AccountKey = c.AccountKey
Where 
    b.Status = 'Active'
GROUP BY
    a.MainCode,
    a.Type,
    a.Group,
    a.InternalCode
HAVING
    count(c.AccountKey) > 0


UNION


SELECT
    Distinct a.MainCode,
    a.Type,
    a.Group,
    a.InternalCode
FROM 111_AccountTable a
Left join 111_AccountDetail b
    on a.MainCode = b.MainCode
Left join 111_AccountHistory c
    on a.AccountKey = c.AccountKey
Where 
    b.Status = 'Active'
GROUP BY
    a.MainCode,
    a.Type,
    a.Group,
    a.InternalCode
HAVING
    count(c.AccountKey) > 0
当前输出
MainCodeTypeGroupInternalCode
3010113000700
3010113000111
3020113000700
3020113000111
3030113000111
3070113000111
3070113000700
3070123000700
期望输出
MainCodeTypeGroup700111
3010113000XX
3020113000XX
3030113000X
3070113000XX
3070123000X
解决方案

通过条件聚合将行数据转为列,直接展示每个账户在不同来源的存在情况,修改后的SQL如下:

WITH CombinedAccounts AS (
    SELECT
        a.MainCode,
        a.Type,
        a.Group,
        a.InternalCode
    FROM 700_AccountTable a
    LEFT JOIN 700_AccountDetail b ON a.MainCode = b.MainCode
    LEFT JOIN 700_AccountHistory c ON a.AccountKey = c.AccountKey
    WHERE b.Status = 'Active'
    GROUP BY a.MainCode, a.Type, a.Group, a.InternalCode
    HAVING COUNT(c.AccountKey) > 0
    
    UNION ALL
    
    SELECT
        a.MainCode,
        a.Type,
        a.Group,
        a.InternalCode
    FROM 111_AccountTable a
    LEFT JOIN 111_AccountDetail b ON a.MainCode = b.MainCode
    LEFT JOIN 111_AccountHistory c ON a.AccountKey = c.AccountKey
    WHERE b.Status = 'Active'
    GROUP BY a.MainCode, a.Type, a.Group, a.InternalCode
    HAVING COUNT(c.AccountKey) > 0
)
SELECT
    MainCode,
    Type,
    Group,
    CASE WHEN MAX(CASE WHEN InternalCode = '700' THEN 'X' END) IS NOT NULL THEN 'X' ELSE '' END AS [700],
    CASE WHEN MAX(CASE WHEN InternalCode = '111' THEN 'X' END) IS NOT NULL THEN 'X' ELSE '' END AS [111]
FROM CombinedAccounts
GROUP BY MainCode, Type, Group
ORDER BY MainCode, Type;

说明

  1. 用WITH子句整合两个来源的有效账户数据,使用UNION ALL避免去重导致的信息丢失
  2. 外层通过嵌套CASE语句做聚合判断:若账户在对应来源存在则标记为X,否则留空
  3. 按MainCode、Type、Group分组,确保每个唯一组合只显示一行

内容的提问来源于stack exchange,提问作者Nicole Ardizzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:42:32