【问题标题】:Snowflake Pivot雪花枢轴
【发布时间】:2021-02-03 01:35:52
【问题描述】:

我有一个 4 列的表 SurveyID、QuestionID、PersonID、Response,其中包含大约 300 多个唯一问题(QuestionId)。我想将 QuestionID 拆分成列,以获得 300 多列。

with c as
(select Distinct QUESTION_ID from "SURVEY_PERSON_QUESTION_RESPONSE"
where SURVEYID = 'SURVEY1')

select * 
  from "SURVEY_PERSON_QUESTION_RESPONSE"
    pivot(max(SURVEY_ID) for QUESTION_ID in c 

我还尝试让它在 300 多个问题 ID 值中的几个上运行:

  select * from SURVEY_PERSON_QUESTION_RESPONSE
    pivot(max(SURVEY_ID) for QUESTION_ID in ("FirstName", "LastName")

我都得到了 SQL 编译错误:

位置 68 处的语法错误第 2 行意外''

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    您的第一个查询将不起作用,因为您需要明确指定您在第二个查询中尝试的列名。您的第二个查询在值中利用双引号而不是单引号。您还缺少一个结束括号。

    select * from SURVEY_PERSON_QUESTION_RESPONSE
        pivot(max(SURVEY_ID) for QUESTION_ID in ('FirstName', 'LastName'));
    

    Snowflake 文档中有一些很好的示例,如果您需要参考:

    https://docs.snowflake.com/en/sql-reference/constructs/pivot.html#examples

    【讨论】:

    • 应用您的格式并得到:SQL 编译错误:位置 14 处的错误行 2 无效标识符 'SURVEY_ID'。是不是因为我所有的列都是字符串?
    • SURVEY_ID 是您表中的列名吗?
    • 在您的原始帖子中,您同时使用了SURVEYID 和SURVEY_ID,因此您需要使用正确的列名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2021-12-26
    • 2020-07-22
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多