在sql中使用if-else条件选择状态

问题描述 投票:0回答:1

目前正在研究雪花。我想为下表编写 SQL 查询-

管道 状态
月索普 无三角洲
月索普 未找到数据
月索普 没有文件
天绳 未找到数据
五绳 无三角洲
天绳 失败
五绳 无三角洲
年度 未找到数据

要求是选择一个具有一定优先级状态的管道(分组后)。

即如果存在“NoDelta”,则应选择它,因为它是第一优先级。 else-if 'NoDataFound' 是第二优先级。

选择的优先级是“NoDelta”、“NoDataFound”、“NoFiles”、“Failed”。因此,输出应如下所示-

管道 状态
月索普 无三角洲
天绳 未找到数据
五绳 无三角洲
年度 未找到数据

您能帮我填写查询吗?我正在尝试使用 CASE,但不知道正确的顺序。

sql
1个回答
0
投票

CASE
语句分配优先级,
QUALIFY
为每个管道选择具有最高优先级的状态。

SELECT
    pipeline,
    status
FROM table
QUALIFY ROW_NUMBER() OVER (
    PARTITION BY pipeline
    ORDER BY CASE status
        WHEN 'NoDelta' THEN 1
        WHEN 'NoDataFound' THEN 2
        WHEN 'NoFiles' THEN 3
        WHEN 'Failed' THEN 4
        ELSE 5
    END ASC
) = 1
ORDER BY pipeline;
© www.soinside.com 2019 - 2024. All rights reserved.