繁体   English   中英

Oracle SQL 计算每个月每周的天数

[英]Oracle SQL count days in week for every month

我有这两张表(时间和销售额):

TIME_ID   |   DAY_NAME  |  DAY_NUMBER_IN_WEEK    |  CALENDAR_MONTH_NAME |  CALENDAR_MONTH_ID
1998-01-10|   Monday    |  1                     |  January             |  1684
1998-01-10|   Tuesday   |  2                     |  January             |  1684
1998-01-10|   Wednesday |  3                     |  January             |  1684
...
1998-01-11|   Monday    |  1                     |  February            |  1685
1998-01-11|   Tuesday   |  2                     |  January             |  1685
1998-01-11|   Wednesday |  3                     |  January             |  1685

销售量

PROD_ID   |  TIME_ID     |  AMOUNT_SOLD
13        |  1998-01-10  |  1232          
13        |  1998-01-11  |  1233 
14        |  1998-01-11  |  1233

我需要为一周中的每一天(星期一、星期二、星期三......)和每个月的每一天的每个 PROD_ID 的 AMOUNT_SOLD 的总和创建列。

SELECT SUM(times.day_number_in_week), times.calendar_month_name, times.day_name, times.calendar_year
FROM sales
INNER JOIN times  ON times.time_id = sales.time_id
GROUP BY times.calendar_month_number, times.calendar_month_name, times.day_name, times.calendar_year

Output:

5988    March   Wednesday   1998
9408    April   Thursday    1998
7532    June    Sunday  1998
9220    July    Thursday    1998
7490    July    Sunday  1998
12540   August  Saturday    1998

但是这个所有年份的所有星期三的总和,我需要一个月的所有日子(星期三,星期一......)的金额总和。

你能帮助我吗?

您可以进行条件聚合:

SELECT 
    t.calendar_year
    t.calendar_month_name, 
    SUM(case when t.day_number_in_week = 1 then s.amount_sold else 0 end) amount_sold_mon,
    SUM(case when t.day_number_in_week = 2 then s.amount_sold else 0 end) amount_sold_tue,
    SUM(case when t.day_number_in_week = 3 then s.amount_sold else 0 end) amount_sold_wed,
    ...
FROM sales s
INNER JOIN times t ON t.time_id = sales.time_id
GROUP BY t.calendar_year, t.calendar_month_number, t.calendar_month_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM