Oracle 11g 中 按 月 开始 日期 分组 [ duplicate ]

ffscu2ro  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(201)

此问题在此处已有答案

How to query GROUP BY Month in a Year(5个答案)
10天前关闭。
我想在Oracle 11g上按月计算ProductTypes的小计,并计算当月销售的所有产品的月总金额。
结构描述:采购项目(采购识别码:整数,供应商:varchar(50),采购类型:varchar(20),采购金额:数字,采购日期:日期)

So, I tried a query:

SELECT month(PurchaseDate) PurchaseMonth, 
     CASE WHEN month(PurchaseDate) is null then 'Grand Total' 
               ELSE coalesce (PurchaseType,'Monthly Total') 
     end AS PurchaseType, 
     Sum(PurchaseAmt) as SummorizedPurchaseAmt
FROM PurchaseItem
GROUP BY ROLLUP(month(PurchaseDate), PurchaseType);

But I am getting the error message: 
ORA-00904: "MONTH": invalid identifier

I am expecting Month-wise sales for each productType
p1iqtdky

p1iqtdky1#

Oracle 中 没有 month 函数 ;以 其他 方式 提取 它 , 例如 使用 to_char 函数 ( 如 我 的 示例 中 所 示 ) 。
以下 是 一些 示例 数据 :

SQL> with purchaseitem(purchasedate, purchasetype, purchaseamt) as
  2    (select date '2022-01-13', 'A', 10 from dual union all
  3     select date '2022-01-25', 'B', 20 from dual union all
  4     select date '2022-04-08', 'C', 30 from dual union all
  5     select date '2022-05-01', 'A', 10 from dual union all
  6     select date '2022-05-22', 'C', 50 from dual
  7    )

中 的 每 一 个
查询 从 此处 开始 :

8  select
  9    to_char(purchasedate, 'mm') purchasemonth,
 10    case when to_char(purchasedate, 'mm') is null then 'Grand total'
 11         else coalesce(purchasetype, 'Monthly total')
 12    end purchasetype,
 13    sum(purchaseamt) summarized
 14  from purchaseitem
 15  group by rollup(to_char(purchasedate, 'mm'), purchasetype);

PU PURCHASETYPE  SUMMARIZED
-- ------------- ----------
01 A                     10
01 B                     20
01 Monthly total         30
04 C                     30
04 Monthly total         30
05 A                     10
05 C                     50
05 Monthly total         60
   Grand total          120

9 rows selected.

SQL>

格式

相关问题