简体   繁体   English

SELECT 声明雪花中的案例声明

[英]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 中使用 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
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 一次:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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