如何解决如何在SQL中在一列中获取值并使这些值成为其他列
ID | Fruit |
010 | Apple |
020 | Orange |
010 | Pear |
说还有其他列,例如Profile_ID。我如何使该表改为这样读取,即该列中的值现在是其自己的列,并且当配置文件与给定的水果相关联时,它将在该行中显示“ X”:
ID | Apple | Orange | Pear
010 | x | | x
020 | | x |
解决方法
您可以使用条件聚合。如果您想要一个特定的个人资料ID,则:
select id,max(case when fruit = 'Apple' and profile_id = ? then 'X' end) as apple,max(case when fruit = 'Orange' and profile_id = ? then 'X' end) as orange,max(case when fruit = 'Pear' and profile_id = ? then 'X' end) as pear
from t
group by id;
如果您只想知道行是否存在:
select id,max(case when fruit = 'Apple' then 'X' end) as apple,max(case when fruit = 'Orange' then 'X' end) as orange,max(case when fruit = 'Pear' then 'X' end) as pear
from t
group by id;
,
以下内容适用于BigQuery标准SQL,并且通用性足以处理任意数量的不同“水果”,不需要手动输入并明确提及所有内容
EXECUTE IMMEDIATE (
SELECT """
SELECT id,""" ||
STRING_AGG("""MAX(IF(Fruit = '""" || Fruit || """','X','')) AS """ || Fruit,',')
|| """
FROM `project.dataset.table`
GROUP BY id
"""
FROM (
SELECT DISTINCT Fruit
FROM `project.dataset.table`
ORDER BY Fruit
)
);
如果要应用于您的问题的样本数据-输出为
Row id Apple Orange Pear
1 010 X X
2 020 X
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。