微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在SQL中在一列中获取值并使这些值成为其他列

如何解决如何在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] 举报,一经查实,本站将立刻删除。