公司做了一个电子卡系统,需要出一张电子卡销售情况的报表,研究了半天终于出来了,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))))
出来的报表如下:
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/