Snowflake中按客户ID与响应时间实现Survey Responses表行转列
Snowflake 行转列实现方案
针对你的需求,用GROUP BY结合CASE WHEN就能准确实现行转列,之前出现ID和响应时间不匹配的问题,大概率是没按customer_ID和response_time做分组,导致不同时间的数据被错误聚合了。
直接用以下SQL语句:
SELECT customer_ID, response_time, MAX(CASE WHEN disp_name = 'Rating Scale' THEN value END) AS Scale, MAX(CASE WHEN disp_name = 'Score' THEN value END) AS Score FROM Survey_Responses GROUP BY customer_ID, response_time ORDER BY customer_ID, response_time;
说明:
- 用
GROUP BY customer_ID, response_time确保每个分组都是同一客户同一响应时间的两条数据(Rating Scale和Score) MAX(CASE...)的作用是提取分组内对应disp_name的value值,因为每个分组里每个CASE条件只会命中一条数据,MAX/MIN都能拿到唯一的非空值- 如果
value字段是字符串类型,而你需要Scale/Score为数值型,可以用TRY_CAST转换,比如:MAX(CASE WHEN disp_name = 'Rating Scale' THEN TRY_CAST(value AS INT) END) AS Scale
如果你之前的SQL没加GROUP BY,或者分组字段不全,就会出现不同response_time的数据被合并,导致ID和时间不匹配的问题,按上面的写法就能解决。
内容的提问来源于stack exchange,提问作者snalmznh
相关产品推荐
相关产品推荐

