自己感觉写的一个比较经典的报表sql

公司做了一个电子卡系统,需要出一张电子卡销售情况的报表,研究了半天终于出来了,sql如下:

SELECT nvl((SELECT TRIM(city_name)
FROM sys_city_info
WHERE to_char(area_code) = area),
area) 地市,
nvl((SELECT TRIM(param_remark)
FROM sys_param
WHERE param_type = 'card_type'
AND param_code = card),
card) 卡类型,
nvl((SELECT TRIM(product_name)
FROM bf_product
WHERE product_id = product
AND prov_code = '034'),
product) 卡产品名称,
quantity 销售数量,
org_amount 销售面值,
amount 实收金额
FROM (SELECT decode(row_number() over(PARTITION BY area ORDER BY area, card, product), 1, area, '') area,
decode(row_number() over(PARTITION BY area, card ORDER BY area, card, product),
1,
card,
'') card,
product,
quantity,
org_amount,
amount
FROM (SELECT decode(area_code_group, 1, '合计', area_code) area,
decode(area_code_group, 0, decode(card_type_group, 1, '大计', card_type), '') card,
decode(card_type_group, 0, decode(product_id_group, 1, '小计', product_id), '') product,
quantity,
org_amount,
amount
FROM (SELECT area_code,
GROUPING(area_code) area_code_group,
card_type,
GROUPING(card_type) card_type_group,
product_id,
GROUPING(product_id) product_id_group,
SUM(total_quantity) quantity,
SUM(total_org_amount) / 100 org_amount,
SUM(total_amount) / 100 amount
FROM st_trans_info
WHERE prov_code = '034'
AND substrb(stat_date, 1, 6) <= '200605' --可以指定任何形式的日期,如某一日(月)或多日(月)
AND busi_id IN (2,20) --2购卡 20批量购卡 1查询 3退卡 -1购卡冲正 10卡号查询
AND card_status = 0 --0有效 -1已退卡 -2已冲正
GROUP BY ROLLUP(area_code, card_type, product_id))))

出来的报表如下:

地市 卡类型 卡产品名称 销售数量 销售面值 实收金额
1 0 193长途卡 50元特惠长话卡 40 2000 800
2 100元特惠长话卡 2 200 80
3 小计 42 2200 880
4 本地全能通卡 9元澳洲畅游卡 26 234 234
5 50元特惠长话卡 323 16150 6460
6 100元特惠长话卡 45 4500 1800
7 小计 394 20884 8494
8 大计 436 23084 9374
9 南京 本地全能通卡 50元特惠长话卡 26 1300 520
10 100元特惠长话卡 3 300 120
11 小计 29 1600 640
12 大计 29 1600 640
13 无锡 193长途卡 50元特惠长话卡 2 100 40
14 小计 2 100 40
15 游戏点卡 100元特惠长话卡 1 100 40
16 小计 1 100 40
17 本地全能通卡 50元特惠长话卡 9 450 180
18 100元特惠长话卡 1 100 40
19 小计 10 550 220
20 大计 13 750 300
21 镇江 本地全能通卡 50元特惠长话卡 2 100 40
22 小计 2 100 40
23 大计 2 100 40
24 常熟 本地全能通卡 50元特惠长话卡 17 850 340
25 100元特惠长话卡 1 100 40
26 小计 18 950 380
27 大计 18 950 380
28 南通 本地全能通卡 50元特惠长话卡 10 500 200
29 100元特惠长话卡 1 100 40
30 小计 11 600 240
31 大计 11 600 240
32 杨州 193长途卡 50元特惠长话卡 4 200 80
33 小计 4 200 80
34 本地全能通卡 50元特惠长话卡 6 300 120
35 小计 6 300 120
36 大计 10 500 200
37 盐城 游戏点卡 50元特惠长话卡 1 50 20
38 小计 1 50 20
39 本地全能通卡 50元特惠长话卡 6 300 120
40 100元特惠长话卡 2 200 80
41 小计 8 500 200
42 大计 9 550 220
43 徐州 193长途卡 100元特惠长话卡 1 100 40
44 小计 1 100 40
45 本地全能通卡 50元特惠长话卡 4 200 80
46 100元特惠长话卡 1 100 40
47 小计 5 300 120
48 大计 6 400 160
49 淮阴 本地全能通卡 50元特惠长话卡 4 200 80
50 100元特惠长话卡 1 100 40
51 小计 5 300 120
52 大计 5 300 120
53 连云港 本地全能通卡 50元特惠长话卡 3 150 60
54 小计 3 150 60
55 大计 3 150 60
56 常州 游戏点卡 50元特惠长话卡 5 250 100
57 小计 5 250 100
58 本地全能通卡 50元特惠长话卡 7 350 140
59 100元特惠长话卡 3 300 120
60 小计 10 650 260
61 大计 15 900 360
62 泰州 游戏点卡 50元特惠长话卡 1 50 20
63 小计 1 50 20
64 本地全能通卡 50元特惠长话卡 3 150 60
65 100元特惠长话卡 2 200 80
66 小计 5 350 140
67 大计 6 400 160
68 宿迁 本地全能通卡 50元特惠长话卡 5 250 100
69 小计 5 250 100
70 大计 5 250 100
71 合计 568 30534 12354

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10881/viewspace-178022/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10881/viewspace-178022/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值