首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在甲骨文中获得月度年度报告

在甲骨文中获得月度年度报告
EN

Stack Overflow用户
提问于 2020-06-24 13:10:21
回答 2查看 252关注 0票数 0

我有一个包含以下字段的employee表:员工姓名、工资日期、我想要汇总的月工资。这是表数据。我使用oracle数据库11g。

这是我想要的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-24 13:33:35

您可以在您的ROLLUP中使用GROUP BY

代码语言:javascript
复制
WITH t(NAME, dt, w) AS (
    SELECT 'adam', DATE '2020-01-01', 200 FROM dual UNION ALL
    SELECT 'adam', DATE '2020-02-01', 200 FROM dual UNION ALL
    SELECT 'adam', DATE '2020-03-01', 200 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-01-01', 100 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-02-01', 200 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-03-01', 151 FROM dual
    )
SELECT NAME, NVL(TO_CHAR(dt, 'fmMon'), 'total') AS mon, SUM(w) AS sum_w
FROM t
GROUP BY NAME, ROLLUP(TO_CHAR(dt, 'fmMon'));


+-----------------+
|NAME |MON  |SUM_W|
+-----------------+
|adam |Feb  |200  |
|adam |Jan  |200  |
|adam |Mar  |200  |
|adam |total|600  |
|jhone|Feb  |200  |
|jhone|Jan  |100  |
|jhone|Mar  |151  |
|jhone|total|451  |
+-----------------+

如果您需要转接结果,您可以PIVOT它:

代码语言:javascript
复制
WITH t(NAME, dt, w) AS (
    SELECT 'adam', DATE '2020-01-01', 200 FROM dual UNION ALL
    SELECT 'adam', DATE '2020-02-01', 200 FROM dual UNION ALL
    SELECT 'adam', DATE '2020-03-01', 200 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-01-01', 100 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-02-01', 200 FROM dual UNION ALL
    SELECT 'jhone', DATE '2020-03-01', 151 FROM dual
    )
SELECT *
FROM (
    SELECT NAME, NVL(TO_CHAR(dt, 'fmMon'), 'total') AS mon, SUM(w) AS sum_w
    FROM t
    GROUP BY NAME, ROLLUP(TO_CHAR(dt, 'fmMon'))
    )
PIVOT (
   SUM(sum_w)
   FOR mon IN ('Jan','Feb','Mar','total')
    );
    
+-------------------------------+
|NAME |'Jan'|'Feb'|'Mar'|'total'|
+-------------------------------+
|adam |200  |200  |200  |600    |
|jhone|100  |200  |151  |451    |
+-------------------------------+
票数 2
EN

Stack Overflow用户

发布于 2020-06-24 13:13:08

您可以按以下方式使用条件聚合:

代码语言:javascript
复制
Select name,
       Sum(case when to_char(date,'mon') = 'jan' then wages end) as jan,
       Sum(case when to_char(date,'mon') = 'feb' then wages end) as feb,
       ...
       Sum(wages) as total
From yourTable
Group by name;

您需要使用where条件只考虑一年的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62555844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档