SELECT 语句雪花中的案例语句

时间:2021-06-04 06:21:37

标签: sql snowflake-cloud-data-platform

我正在尝试在 select 中使用 case 语句,但我有很多语法错误,有人可以告诉我我做错了什么的详细信息 我正在尝试:

SELECT DISTINCT                 
DECL.Mois,
Base.Rattachement_Date_Debut,
SUBSTR ('12345678', 3, 2 ) FROM Base.Rattachement_Date_Debut,
  CASE SUBSTR ('12345678', 3, 2 ) FROM Base.Rattachement_Date_Debut
    WHEN Base.Rattachement_Date_Debut IS NULL THEN 'NULL'
    WHEN SUBSTR ('12345678', 3, 2 ) = '01'||'O2'||'03' THEN '1T'
    WHEN SUBSTR ('12345678', 3, 2 ) = '04'||'O5'||'06' THEN '2T'
    WHEN SUBSTR ('12345678', 3, 2 ) = '07'||'O8'||'09' THEN '3T'
    WHEN SUBSTR ('12345678', 3, 2 ) = '10'||'11'||'12' THEN '4T'
    ELSE "No Data Provided"
END as 'REFTRIM'
FROM Declaration AS DECL

2 个答案:

答案 0 :(得分:0)

select MOIS, 
       Rattachement_Date_Debut, 
       CASE SUBSTR (Rattachement_Date_Debut,3,2)
          WHEN '01' THEN '1T'
          WHEN '02' THEN '1T'
          WHEN '03' THEN '1T'
          WHEN '04' THEN '2T'
          WHEN '05' THEN '2T'
          WHEN '06' THEN '2T'
          WHEN '07' THEN '3T'
          WHEN '08' THEN '3T'
          WHEN '09' THEN '3T'
          WHEN '10' THEN '4T'
          WHEN '11' THEN '4T'
          WHEN '12' THEN '4T'
     ELSE 'No Data Provided'
     END as REFTRIM
from DECLARATION;

或者:

select MOIS, 
       Rattachement_Date_Debut, 
       CASE
          WHEN SUBSTR(Rattachement_Date_Debut, 3, 2) IN ('01','02','03') THEN '1T'
          WHEN SUBSTR(Rattachement_Date_Debut, 3, 2) IN ('04','05','06') THEN '2T'
          WHEN SUBSTR(Rattachement_Date_Debut, 3, 2) IN ('07','08','09') THEN '3T'
          WHEN SUBSTR(Rattachement_Date_Debut, 3, 2) IN ('10','11','12') THEN '4T'
       ELSE 'No Data Provided'
    END as REFTRIM
from DECLARATION;

测试用例:

create database Benouille;

create or replace table DECLARATION (
  MOIS VARCHAR(15), 
  Rattachement_Date_Debut VARCHAR(15)
);

INSERT into DECLARATION (MOIS, Rattachement_Date_Debut)
values 
('janvier', '01012021'),
('février', '01022021'),
('mars', '01032021'),
('avril', '01042021'),
('mai', '01052021'),
('juin', '01062021'),
('juillet', '01072021'), 
('août', '01082021'),
('septembre', '01092021'), 
('octobre', '01102021' ),
('novembre', '01112021'),
('décembre', '01122021'),
('mal', '00002021');

答案 1 :(得分:0)

非常感谢, 我发现这个更有效,因为您只使用一次 SUBSTR :

SUBSTR(Base.Rattachement_Date_Debut, 3, 2) AS MOIS_DATE_DEB_RATTACH,
CASE 
    WHEN MOIS_DATE_DEB_RATTACH IN ('01','02','03') THEN '1T'
    WHEN MOIS_DATE_DEB_RATTACH IN ('04','05','06') THEN '2T'
    WHEN MOIS_DATE_DEB_RATTACH IN ('07','08','09') THEN '3T'
    WHEN MOIS_DATE_DEB_RATTACH IN ('10','11','12') THEN '4T'
END AS "REF_TRIMESTRE_ANNEE",