在 Oracle 中使用 SUM 和 CASE SQL
Using SUM and CASE in Oracle SQL
我构造了一个查询以从 2 个表中获取按日期列分组的计数。
select count(*),TO_CHAR(CREATION_DATE,'DD/Mon/YY HH') as Date_TIME,'Table_1' as TABLE_NAME
from TABLE 1
where CREATION_DATE > TO_DATE('01/10/2020','DD/MM/YYYY')
group by TO_CHAR(CREATION_DATE,'DD/Mon/YY HH')
UNION
select count(*),TO_CHAR(CREATION_DATE,'DD/Mon/YY HH') as Date_TIME , 'Table_2' as TABLE_NAME
from TABLE 2
where CREATION_DATE > TO_DATE('01/10/2020','DD/MM/YYYY')
group by TO_CHAR(CREATION_DATE,'DD/Mon/YY HH')
我想从两个表中获取结果,因此我使用了 UNION
。因为我想要按 TO_CHAR(CREATION_DATE, 'DD/Mon/YY HH')
分组的计数的每小时分解
输出是这样的:
443 14/Oct/20 04 Table_1
861 14/Oct/20 04 Table_2
371 14/Oct/20 05 Table_1
323 14/Oct/20 06 Table_2
如您所见,我希望输出 counts summed up hour[=31] =] 从两个表中得出这样的结果:
1304 14/Oct/20 04 Table_1
371 14/Oct/20 05 Table_1
323 14/Oct/20 06 Table_2
我可以做到这一点excel,但不实用。我在考虑 Oracle 中的 CASE 语句,但从未真正实现它。
数据库:甲骨文
编辑:Toad for Oracle
使用您当前的查询作为最终结果的数据源:
SELECT SUM (cnt) sum_cnt, date_time, MAX (table_name) table_name
FROM ( SELECT COUNT (*) cnt,
TO_CHAR (creation_date, 'DD/Mon/YY HH') AS date_time,
'Table_1' AS table_name
FROM TABLE_1
WHERE creation_date > TO_DATE ('01/10/2020', 'DD/MM/YYYY')
GROUP BY TO_CHAR (creation_date, 'DD/Mon/YY HH')
UNION
SELECT COUNT (*),
TO_CHAR (creation_date, 'DD/Mon/YY HH') AS date_time,
'Table_2' AS table_name
FROM TABLE_2
WHERE creation_date > TO_DATE ('01/10/2020', 'DD/MM/YYYY')
GROUP BY TO_CHAR (creation_date, 'DD/Mon/YY HH'))
GROUP BY date_time
ORDER BY date_time, table_name
我构造了一个查询以从 2 个表中获取按日期列分组的计数。
select count(*),TO_CHAR(CREATION_DATE,'DD/Mon/YY HH') as Date_TIME,'Table_1' as TABLE_NAME
from TABLE 1
where CREATION_DATE > TO_DATE('01/10/2020','DD/MM/YYYY')
group by TO_CHAR(CREATION_DATE,'DD/Mon/YY HH')
UNION
select count(*),TO_CHAR(CREATION_DATE,'DD/Mon/YY HH') as Date_TIME , 'Table_2' as TABLE_NAME
from TABLE 2
where CREATION_DATE > TO_DATE('01/10/2020','DD/MM/YYYY')
group by TO_CHAR(CREATION_DATE,'DD/Mon/YY HH')
我想从两个表中获取结果,因此我使用了 UNION
。因为我想要按 TO_CHAR(CREATION_DATE, 'DD/Mon/YY HH')
输出是这样的:
443 14/Oct/20 04 Table_1
861 14/Oct/20 04 Table_2
371 14/Oct/20 05 Table_1
323 14/Oct/20 06 Table_2
如您所见,我希望输出 counts summed up hour[=31] =] 从两个表中得出这样的结果:
1304 14/Oct/20 04 Table_1
371 14/Oct/20 05 Table_1
323 14/Oct/20 06 Table_2
我可以做到这一点excel,但不实用。我在考虑 Oracle 中的 CASE 语句,但从未真正实现它。
数据库:甲骨文 编辑:Toad for Oracle
使用您当前的查询作为最终结果的数据源:
SELECT SUM (cnt) sum_cnt, date_time, MAX (table_name) table_name
FROM ( SELECT COUNT (*) cnt,
TO_CHAR (creation_date, 'DD/Mon/YY HH') AS date_time,
'Table_1' AS table_name
FROM TABLE_1
WHERE creation_date > TO_DATE ('01/10/2020', 'DD/MM/YYYY')
GROUP BY TO_CHAR (creation_date, 'DD/Mon/YY HH')
UNION
SELECT COUNT (*),
TO_CHAR (creation_date, 'DD/Mon/YY HH') AS date_time,
'Table_2' AS table_name
FROM TABLE_2
WHERE creation_date > TO_DATE ('01/10/2020', 'DD/MM/YYYY')
GROUP BY TO_CHAR (creation_date, 'DD/Mon/YY HH'))
GROUP BY date_time
ORDER BY date_time, table_name