如何在Snowflake中编写SQL查询查找Column1中的原始编号
如何查找Column1中的原始编号
在Snowflake中编写SQL查询的最优或最具表达性的方式是什么?
需匹配的逻辑如下:
- Column5 = 0 且 Column1 以
qw开头 - 以qw开头的数据的最后3位数字 = 对应原始编号的最后3位数字
- 二者的Column2、Column3、Column4值完全相同
原始数据
| Column1 | Column2 | Column3 | Column4 | Column5 |
|---|---|---|---|---|
| 12345 | 23 | 11 | 45242 | 7890 |
| qw345 | 23 | 11 | 45242 | 0 |
| 23981 | 56 | 22 | 45243 | 6678 |
| qw981 | 56 | 22 | 45243 | 0 |
| 99765 | 31 | 90 | 45244 | 3345 |
| qw765 | 31 | 90 | 45244 | 0 |
| 44871 | 78 | 45 | 45245 | 2345 |
| qw871 | 78 | 45 | 45245 | 0 |
示例输出
| 原始编号 | 待匹配编号 |
|---|---|
| 12345 | qw345 |
| 23981 | qw981 |
| 99765 | qw765 |
| 44871 | qw871 |
解决方案SQL
SELECT orig.Column1 AS 原始编号, qw.Column1 AS 待匹配编号 FROM your_table orig INNER JOIN your_table qw ON orig.Column2 = qw.Column2 AND orig.Column3 = qw.Column3 AND orig.Column4 = qw.Column4 AND RIGHT(orig.Column1, 3) = RIGHT(qw.Column1, 3) WHERE orig.Column5 != 0 AND qw.Column5 = 0 AND qw.Column1 LIKE 'qw%';
逻辑说明
- 使用自连接将表与自身关联,分别筛选出原始记录(
orig别名,Column5不为0)和待匹配的qw开头记录(qw别名,Column5为0且Column1以qw开头) - 通过
Column2、Column3、Column4三个字段确保记录属于同一组 - 用
RIGHT()函数提取两个Column1字段的最后3位数字,确保二者匹配
内容的提问来源于stack exchange,提问作者Ashwini
相关产品推荐
相关产品推荐

