Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle sql查询每月汇总数据_Sql_Oracle - Fatal编程技术网

Oracle sql查询每月汇总数据

Oracle sql查询每月汇总数据,sql,oracle,Sql,Oracle,假设我从oktober选择了数据,直到12月,如下所示 我想得到每个月购买客户的金额(okt des) 我想要的结果如下表所示 我已经知道如何获取月份的最后一天但我不知道如何使用SQL查询来获取结果,就像我需要的那样一种方法是使用条件聚合,如果您只需要这三个月的数据: select name, sum(case when dt >= date '2017-10-01' and dt < date '2017-11-01'

假设我从oktober选择了数据,直到12月,如下所示

我想得到每个月购买客户的金额(okt des) 我想要的结果如下表所示


我已经知道如何获取月份的最后一天
但我不知道如何使用SQL查询来获取结果,就像我需要的那样

一种方法是使用条件聚合,如果您只需要这三个月的数据:

select   name,
         sum(case when dt >= date '2017-10-01' and dt < date '2017-11-01'
                  then buying end) as oktober,
         sum(case when dt >= date '2017-11-01' and dt < date '2017-12-01'
                  then buying end) as november,
         sum(case when dt >= date '2017-12-01' and dt < date '2018-01-01'
                  then buying end) as desember
from     YOUR_TABLE
where    dt >= date '2017-10-01' and dt < date '2018-01-01'
group by name
;
选择名称,
总和(dt>=日期“2017-10-01”和dt<日期“2017-11-01”时的情况)
然后买入)作为oktober,
总和(dt>=日期“2017-11-01”和dt<日期“2017-12-01”时的情况)
然后买入)截至11月,
总和(dt>=日期“2017-12-01”和dt<日期“2018-01-01”时的情况)
然后买完)作为十二月
从你的桌子上
其中dt>=日期“2017-10-01”和dt<日期“2018-01-01”
按名称分组
;

请注意,
date
是Oracle关键字,不应用作列名;我把它改成了
dt
您的_表
应该是您的实际表名。

如果您只需要这三个月的数据,可以使用条件聚合:

select   name,
         sum(case when dt >= date '2017-10-01' and dt < date '2017-11-01'
                  then buying end) as oktober,
         sum(case when dt >= date '2017-11-01' and dt < date '2017-12-01'
                  then buying end) as november,
         sum(case when dt >= date '2017-12-01' and dt < date '2018-01-01'
                  then buying end) as desember
from     YOUR_TABLE
where    dt >= date '2017-10-01' and dt < date '2018-01-01'
group by name
;
选择名称,
总和(dt>=日期“2017-10-01”和dt<日期“2017-11-01”时的情况)
然后买入)作为oktober,
总和(dt>=日期“2017-11-01”和dt<日期“2017-12-01”时的情况)
然后买入)截至11月,
总和(dt>=日期“2017-12-01”和dt<日期“2018-01-01”时的情况)
然后买完)作为十二月
从你的桌子上
其中dt>=日期“2017-10-01”和dt<日期“2018-01-01”
按名称分组
;
请注意,
date
是Oracle关键字,不应用作列名;我把它改成了
dt
您的_表
应该是您的实际表名。

试试这个

 DESC TABLE_NAME
        NAME    VARCHAR2(20 BYTE)
        BUYING  NUMBER
        BUYING_DATE DATE

    select * from
    (
    select name,buying,RTRIM(to_char(buying_Date,'Month')) dd
    from
    TABLE_NAME
    )
    PIVOT
    (
    SUM(buying)
    for dd IN ('October','November','December')
    );
试试这个

 DESC TABLE_NAME
        NAME    VARCHAR2(20 BYTE)
        BUYING  NUMBER
        BUYING_DATE DATE

    select * from
    (
    select name,buying,RTRIM(to_char(buying_Date,'Month')) dd
    from
    TABLE_NAME
    )
    PIVOT
    (
    SUM(buying)
    for dd IN ('October','November','December')
    );

当你(显然)不知道它的意思时,不要仅仅因为你听说过它就说“plsql”。我编辑了你的帖子并删除了
plsql
标签。那么:您是否有2017年10月至12月的数据,或者可能还有其他日期的数据?还有,你只需要这些特定月份(2017年10月至12月)的输出吗?@mathguy是的,我有其他日期的数据,但我只需要spesific月份(okt-des 2017)的输出,当你(显然)不知道它的意思时,不要说“plsql”,因为你听说过它。我编辑了你的帖子并删除了
plsql
标签。那么:您是否有2017年10月至12月的数据,或者可能还有其他日期的数据?而且,您是否只需要这些特定月份(2017年10月至12月)的输出?@mathguy是的,我有其他日期的数据,但我只需要spesific月份(okt-des 2017)的输出。如何动态地包括任何日期?例如,如果日期范围为2017年1月1日至2019年12月31日。如果将未来的日期(如10-15-2999和10-31-2999)添加到表中会发生什么情况?@swagless_monk-在编译时不知道列数,但仅在执行时知道列数的查询要困难得多。这就是“动态SQL”的全部主题—一个高级主题,通常数据透视是在报表软件中完成的(而不是在查询本身中)—以这种方式呈现数据通常是一种非常糟糕的做法。如何动态地包含任何日期?例如,如果日期范围为2017年1月1日至2019年12月31日。如果将未来的日期(如10-15-2999和10-31-2999)添加到表中会发生什么情况?@swagless_monk-在编译时不知道列数,但仅在执行时知道列数的查询要困难得多。这就是“动态SQL”的全部主题,这是一个高级主题,数据透视通常在报表软件中完成(而不是在查询本身中),以这种方式呈现数据通常是一种非常糟糕的做法。