我必须按月和一年的卡片类型展示orderdata组,如下所示:
MONTH CARDTYPE ORDER_CNT
201201 AMEX 10,835
201201 DISC 6,542
201201 MC 2,675
201202 AMEX 66,817
201202 DISC 36,581
201202 MC 165,683
我可以从中获取数据的表在每个月的每一天都有订单。我使用以下SQL按卡类型对每月中每天的订单计数进行分组:
(
SELECT cardtype,orderdate,COUNT (distinct(orderserialno)) FROM tablename
where orderdate between '01-jan-2012' and '31-dec-2012'
GROUP BY cardtype,orderdate
)
现在我需要使用case语句以上述形式呈现这些数据,因为我必须按月对它进行分组,但是我无法做到这一点。有人可以帮忙。
由于
答案 0 :(得分:1)
按月分组,你可以使用:
SQLServer的:
group by year(dateField)+month(dateField)
或 甲骨文:
group by to_char(dateField, 'Year') + to_char(dateField, 'Month')
所以对于您的查询:
SELECT cardtype,COUNT (distinct(orderserialno)),year(dateField)+month(dateField) as order_date FROM tablename
where orderdate between '01-jan-2012' and '31-dec-2012'
GROUP BY cardtype,year(dateField)+month(dateField)
答案 1 :(得分:1)
SELECT * FROM
(
SELECT to_number(substr('201201', 1, 4)) curr_year
, to_number(substr('201201', -2, 2)) curr_month
, 'AMEX' card_type FROM dual
UNION ALL
SELECT to_number(substr('201202', 1, 4))
, to_number(substr('201202', -2, 2))
, 'DISC' FROM dual
)
ORDER BY curr_year, curr_month, card_type
/
CURR_YEAR CURR_MONTH CARD_TYPE
------------------------------------
2012 1 AMEX
2012 2 DISC
答案 2 :(得分:1)
您可以像这样修改GROUP BY
部分:
GROUP BY cardtype, trunc(orderdate, 'MM')
在SELECT
部分,您应该使用to_char(orderdate, 'YYYYMM')
而不是orderdate