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

SQL中将一对多表转换为一对一表的技术实现咨询

SQL行转列解决方案

原表结构与数据

Member IDCommTypeConsentEmailable
1NewsYesYes
2NewsYesNo
1SurveysNo
2SurveysYesYes
1EventsYes
3NewsNoNo

转换规则

  • 当对应CommType的Consent和Emailable均为Yes时,列值为Yes
  • 当对应CommType的Emailable为No时,列值为No
  • 当对应CommType的Emailable为NULL,或无该Member的此CommType行时,列值为NULL

期望结果

Member IDNewsSurveysEvents
1Yes
2NoYes
3No

实现SQL

SELECT
    `Member ID`,
    -- 处理News列
    MAX(CASE
        WHEN CommType = 'News' AND Consent = 'Yes' AND Emailable = 'Yes' THEN 'Yes'
        WHEN CommType = 'News' AND Emailable = 'No' THEN 'No'
        ELSE NULL
    END) AS News,
    -- 处理Surveys列
    MAX(CASE
        WHEN CommType = 'Surveys' AND Consent = 'Yes' AND Emailable = 'Yes' THEN 'Yes'
        WHEN CommType = 'Surveys' AND Emailable = 'No' THEN 'No'
        ELSE NULL
    END) AS Surveys,
    -- 处理Events列
    MAX(CASE
        WHEN CommType = 'Events' AND Consent = 'Yes' AND Emailable = 'Yes' THEN 'Yes'
        WHEN CommType = 'Events' AND Emailable = 'No' THEN 'No'
        ELSE NULL
    END) AS Events
FROM
    表A
GROUP BY
    `Member ID`
ORDER BY
    `Member ID`;

说明

  • 使用MAX()聚合函数是因为每个Member ID + CommType唯一,聚合后只会保留对应CommType的唯一判断结果
  • 每个CASE分支严格对应转换规则,确保逻辑准确
  • 若后续新增CommType,只需复制对应CASE块并修改CommType值即可扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:15:45