【问题标题】:Multipivot issue in Snowflake雪花中的多轴问题
【发布时间】:2021-06-26 13:54:38
【问题描述】:

无法在 Snowflake 中使用多列枢轴。单列枢轴工作正常。 以下是我的查询:

SELECT * FROM ( SELECT DISTINCT geo_lkp.MSA_CD , geo_lkp.MSA_NM, geo_lkp.CSA_CD , 
    geo_lkp.CSA_NM
    FROM T_GEO_LKP geo_lkp , T_DIM_STATE_PROV state_lkp 
    WHERE geo_lkp.state_prov_nm = state_lkp.state_prov_cd 
    AND UPPER(geo_lkp.PSTL_CD) = '12345' AND state_lkp.ISO_3_CHAR_CNTRY_CD = 'USA' ) 
    
    UNPIVOT( (LOCATION_CODE, LOCATION_NAME) FOR LOCATION_TYPE
            IN ( (CSA_CD,CSA_NM) AS 'csa', 
                 (MSA_CD,MSA_NM) AS 'msa') )
                ORDER BY LOCATION_NAME 

正在尝试转换下表数据:

MSA_CD MSA_NM CSA_CD CSA_NM
10580 Albany 104 Albany

到

LOCATION_TYPE LOCATION_CD LOCATION_NM
msa 10580 Albany
csa 104 Albany

【问题讨论】:

  • Oracle 不是雪花。我删除了不相关的标签。

标签: sql snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

我建议使用横向连接和values:

select v.*
from t cross join lateral
     (values ('msa', msa_cd, msa_nm),
             ('csa', csa_cd, csa_nm)
     ) v(location_type, location_cd, location_nm)

         

【讨论】:

    【解决方案2】:

    通过雪花支持,我们了解到目前不支持多列 UNPIVOT。我们必须解决问题。可以像@gordon Linoff 提到的那样。

    另一种解决方案可以是:

    with location_data as (
        SELECT DISTINCT geo_lkp.MSA_CD , geo_lkp.MSA_NM, geo_lkp.CSA_CD ,
        geo_lkp.CSA_NM
        FROM T_GEO_LKP geo_lkp , T_DIM_STATE_PROV state_lkp
        WHERE geo_lkp.state_prov_nm = state_lkp.state_prov_cd
        AND UPPER(geo_lkp.PSTL_CD) = '12345' AND state_lkp.ISO_3_CHAR_CNTRY_CD = 'USA' 
        )
    select location_type, location_code, location_name from
    (
      select 'csa' as location_type, csa_cd as location_code, csa_nm as location_name from location_data
      union all
      select 'msa', msa_cd, msa_nm from location_data
    ) where location_code is not null order by location_name; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多