Oracle SQL Pivot -- 获取行总计
Posted
技术标签:
【中文标题】Oracle SQL Pivot -- 获取行总计【英文标题】:Oracle SQL Pivot -- Getting Row Totals 【发布时间】:2020-08-31 21:54:09 【问题描述】:我有以下疑问:
SELECT *
FROM
(
SELECT COUNT (APP_AUTOMATIC_NUMBER) AS RECORD_COUNT, LETTER_TYPE_ID,
TO_DATE (EXTRACT_DATE, 'MMDDYYYY') AS EXTRACT_DATE,
'Consumer' AS ACCT_TYPE
FROM [TABLE_NAME]
WHERE SUBSTR(EXTRACT_DATE, -4) = '2020' and EXTRACT_DATE between TO_CHAR( (sysdate - 6), 'MMDDYYYY' ) and TO_CHAR( (sysdate - 4), 'MMDDYYYY' )
GROUP BY CUBE (LETTER_TYPE_ID, EXTRACT_DATE)
) t
PIVOT(
SUM(RECORD_COUNT)
FOR LETTER_TYPE_ID IN (
1,10,11,12,13,14,4,7,9)
)
ORDER BY EXTRACT_DATE
它将在屏幕截图中返回结果(见下文),它对列进行总计,但我想改为对行进行总计。因此,改为获取每天的总记录数......而不是按列显示总数。
这似乎是一个常见的问题,但是我试图在互联网上搜索一个直截了当的答案感到很沮丧。
【问题讨论】:
能否提供一些示例数据和预期结果? 【参考方案1】:我会推荐条件聚合:它比供应商特定的pivot
语法更灵活,可以更轻松地做你想做的事。
select
to_date (extract_date, 'mmddyyyy') as extract_date,
'Consumer' as acct_type
sum(case when letter_type_id = 1 then 1 else 0 end) as type_1,
sum(case when letter_type_id = 10 then 1 else 0 end) as type_10,
...
sum(case when letter_type_id = 9 then 1 else 0 end) as type_9,
count(*) type_total
from mytable
where
letter_type_id in ( 1,10,11,12,13,14,4,7,9)
and extract_date between to_char(sysdate - 6, 'mmddyyyy') and to_char(sysdate - 4, 'mmddyyyy')
and substr(extract, -4) = '2020'
group by 1
order by 1
旁注:我不清楚where
子句中日期的过滤逻辑:当您的服务器的系统日期将达到 2021 年 1 月 6 日时,您当前的谓词将过滤掉所有行。
【讨论】:
以上是关于Oracle SQL Pivot -- 获取行总计的主要内容,如果未能解决你的问题,请参考以下文章