sql - Oracle SQL Pivot -- 获取行总计
问题描述
我有以下查询:
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
它将在屏幕截图中返回结果(见下文),它对列进行总计,但我想对行进行总计。因此,改为获取每天的总记录数......而不是按列显示总数。
这似乎是一个常见问题,但是我试图在互联网上搜索一个直截了当的答案感到很沮丧。
解决方案
我会推荐条件聚合:它比特定于供应商的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 日时,您当前的谓词将过滤掉所有行。
推荐阅读
- javascript - 在nodejs中给出空数组的API调用
- css - 错误:CSS:unicode-range:值太多或无法识别值
- json - Flutter 在 json 数据中获取和循环
- javascript - 需要在 Firebase 的集合中写入集合
- module - 是否有可以在 Google Colaboratory 中使用的“simplegui”替代模块?
- python - Django:使用复合键的替代方法
- cassandra - Stargate REST API 是否支持 LIMIT 子句?
- typescript - TypeScript:检查对象属性是否为自定义类型
- reactjs - 如何防止我的图表重新渲染?(反应JS)
- apache-spark - 如何使用 Databricks 在 Apache Spark 中使用 SparkSQL 或 PySpark 查询 JSON 中的数组