如何在 Snowflake 中执行数据透视(计数(*))功能
How to do Pivot (Count (*) ) functionality in Snowflake
我的查询如下:
我收到“意外的‘*’”错误。在第 6 行,请告诉我如何重写或更正此问题
select * from (SELECT gl gl_acc,
reg reg,
mapp map_name,
field as f1
FROM gl_acc a
WHERE TYPE = 'AGG') PIVOT (count(*)
FOR f1
IN (
'JOURN' ,
'JOU' ,
'J' ,
'CASE_' ,
'JOUR'
))as p;
谢谢,
去
只使用条件聚合:
SELECT gl, reg, mapp,
SUM(CASE WHEN field = 'JOURN' THEN 1 ELSE 0 END) as journ,
SUM(CASE WHEN field = 'JOU' THEN 1 ELSE 0 END) as jou,
SUM(CASE WHEN field = 'J' THEN 1 ELSE 0 END) as j,
SUM(CASE WHEN field = 'CASE_' THEN 1 ELSE 0 END) as case_,
SUM(CASE WHEN field = 'JOUR' THEN 1 ELSE 0 END) as jour
FROM gl_acc a
WHERE TYPE = 'AGG'
GROUP BY gl, reg, mapp;
或者更简单地使用 COUNT_IF()
SELECT gl, reg, mapp,
COUNT_IF(field = 'JOURN') as journ,
COUNT_IF(field = 'JOU') as jou,
COUNT_IF(field = 'J') as j,
COUNT_IF(field = 'CASE_') as case_,
COUNT_IF(field = 'JOUR') as jour
FROM gl_acc a
WHERE TYPE = 'AGG'
GROUP BY gl, reg, mapp;
我也会选择条件聚合。它更容易阅读和维护。要让您的代码正常工作,您需要在 count
函数中指定您要计算的确切内容。
您没有提供示例,但这里有一个工作代码供您查看其工作原理
with cte (num0,num1,str1) as
(select 1,1,'a' union all
select 2,1,'a')
select *
from cte
pivot (count(num1) for str1 in ('a', 'b')) as t(col1, col2, col2)
请注意如何使用数据透视表中的 as
子句来定义自定义列名称,从而避免该子查询。
我的查询如下:
我收到“意外的‘*’”错误。在第 6 行,请告诉我如何重写或更正此问题
select * from (SELECT gl gl_acc,
reg reg,
mapp map_name,
field as f1
FROM gl_acc a
WHERE TYPE = 'AGG') PIVOT (count(*)
FOR f1
IN (
'JOURN' ,
'JOU' ,
'J' ,
'CASE_' ,
'JOUR'
))as p;
谢谢, 去
只使用条件聚合:
SELECT gl, reg, mapp,
SUM(CASE WHEN field = 'JOURN' THEN 1 ELSE 0 END) as journ,
SUM(CASE WHEN field = 'JOU' THEN 1 ELSE 0 END) as jou,
SUM(CASE WHEN field = 'J' THEN 1 ELSE 0 END) as j,
SUM(CASE WHEN field = 'CASE_' THEN 1 ELSE 0 END) as case_,
SUM(CASE WHEN field = 'JOUR' THEN 1 ELSE 0 END) as jour
FROM gl_acc a
WHERE TYPE = 'AGG'
GROUP BY gl, reg, mapp;
或者更简单地使用 COUNT_IF()
SELECT gl, reg, mapp,
COUNT_IF(field = 'JOURN') as journ,
COUNT_IF(field = 'JOU') as jou,
COUNT_IF(field = 'J') as j,
COUNT_IF(field = 'CASE_') as case_,
COUNT_IF(field = 'JOUR') as jour
FROM gl_acc a
WHERE TYPE = 'AGG'
GROUP BY gl, reg, mapp;
我也会选择条件聚合。它更容易阅读和维护。要让您的代码正常工作,您需要在 count
函数中指定您要计算的确切内容。
您没有提供示例,但这里有一个工作代码供您查看其工作原理
with cte (num0,num1,str1) as
(select 1,1,'a' union all
select 2,1,'a')
select *
from cte
pivot (count(num1) for str1 in ('a', 'b')) as t(col1, col2, col2)
请注意如何使用数据透视表中的 as
子句来定义自定义列名称,从而避免该子查询。