简体   繁体   中英

CASE STATEMENT WITHIN A SELECT STATEMENT SNOWFLAKE

I'm trying to use a case statement within a select but I have many syntax errors, can someone give me details about what I'm doing wrong please I am trying:

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
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;

Or:

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;

Test case:

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');

Thanks a lot, I find this one is more effective, as you use SUBSTR just once:

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",

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM