sql - SQL 行到列但不转置
问题描述
我们有一张关于识别数据的表格:
顾客号码 | 鉴别 |
---|---|
101 | 护照-我们 |
101 | 执照 |
102 | 护照-英国 |
102 | 执照 |
102 | 出生证明 |
103 | 执照学习者 |
因此,一位客户可能以不同的数量/组合提交了多个其他标识。
我们追求的结果是:
顾客号码 | 护照 | 执照 | 出生证明 |
---|---|---|---|
101 | 护照-我们 | 执照 | |
102 | 护照-英国 | 执照 | 出生证明 |
103 | 执照学习者 |
因此,基本上采用确切的文本并将其放在后续列中。
我们知道的是:
- 只有三种我们感兴趣的识别类型(如果还有其他我们没有捕捉到)
- 他们将在其中包含关键字(护照,出生等)
- 没有给定客户编号如何进入表的顺序,在更大的表中的其他位置有一个单独的主键。
- 我们的目标是在 hive 中运行查询
我可能正在考虑使用 REGEXP_EXTRACT 进行三次自我加入。
想法?
解决方案
你可以像这样使用纯 sql 来做到这一点:
select
CustomerNumber,
max(case when Identification like 'passport%' then Identification else null end) as Passport,
max(case when Identification like 'Licence%' then Identification else null end) as Licence,
max(case when Identification ='birth-cert' then Identification else null end) as BirthCertificate
from identification
group by CustomerNumber
推荐阅读
- ruby - Rubocop 禁用所有规则并创建启用规则的 whilelist
- java - 如何在 UI 接受的 itextpdf PDF 中显示多语言或任何 UNICODE 特殊字符?
- python - 检查 mkl 是否正确安装在 python3 中
- gcc - 使用 gcov 选项构建 ada
- java - 在 JSON 中获取重复响应
- java - 如何通过 Java 流收集具有特定功能的现有 List 元素的新 List?
- reactjs - 在 JSX 中添加 DOM 属性
- javascript - html 日期输入中的最大属性在 Firefox 中不起作用
- c# - 无法从 AWS Lambda 函数中的线程发布到 SNS
- hazelcast - Hazelcast Jet 是否支持滚动数字作为 IMap 键,以 Kafka 作为源?