在SQL中将一对多表转换为一对一表



我需要一些SQL指导。我有一个表(a(,它看起来像这样(注意的行应该是ID+CommType唯一的(:

同意是是否是是否
成员ID CommType可通过电子邮件发送
1 新闻
2 新闻
1 调查
2 调查
1 事件
3 新闻

您可以尝试以下操作-注意,这假设您有合理数量的不同CommTypes,并且您知道所有可能的值:

SELECT member_id
, MIN(CASE WHEN CommType='News' THEN CASE WHEN Consent = 'Yes' AND Emailable='Yes' THEN 'Yes' WHEN Emailable = 'No' THEN 'No' END END) AS news
, MIN(CASE WHEN CommType='Surveys' THEN CASE WHEN Consent = 'Yes' AND Emailable='Yes' THEN 'Yes' WHEN Emailable = 'No' THEN 'No' END END) AS surveys
, MIN(CASE WHEN CommType='Events' THEN CASE WHEN Consent = 'Yes' AND Emailable='Yes' THEN 'Yes' WHEN Emailable = 'No' THEN 'No' END END) AS events
-- , ..., do the same for each possible CommType
FROM your_table
GROUP BY member_id

最新更新