作者UCboy (游戏boy)
看板Database
标题[SQL ] Oracle DB的With-as用法
时间Wed Jul 11 18:41:23 2018
资料库名称:Oracle - PL/SQL
内容/问题描述:
请问能否让两个SELECT叙述 共用一个With-as创建出来的Table?
目前有一个老客户优惠级距的Table: Discount
经过
AA 的条件处理後会取得以下子table
tb1:
折扣编号 起始年数 终止年数 折扣数
Disno StartPt EndPt Discnt
01 1 1 90
02 2 4 80
03 5 7 70
04 8 99 60
会根据老客户 从使用到现在 的
年数 Diff_y
去判断是在哪个级距 进而套用对应的折扣
但如果是在两级距交界的月份 就必须去取得两段级距
再依照天数比例算出该月的优惠
例如:
开始使用是1050711,那10707这个月份就会有两段折扣
1070701~1070711采用01折扣,1070712~1070731采用02折扣
简单来说就是要取得
两段级距个别的折扣
目前我的写法是
with
tb1 as(
Select * FROM Discount WHERE (
AA) )
SELECT Disno, Discnt INTO v_dno, v_dv2
FROM tb1
WHERE StartPt <=
Diff_y
AND
Diff_y <= EndPt;
(先取得该段级距之折扣编号及折扣数)
SELECT Discnt INTO v_dv1
FROM tb1
WHERE Disno=v_dno-1;
(再取得前一段级距之折扣)
但好像不能这样两段SELECT共用一个With的Table?
请问专业的大大们
有其他办法可以让两段Select共用一个Temp Table吗?
感谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.71.217.243
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1531305685.A.E1D.html
1F:推 cutekid: 要不要直接把「来源 table」有哪些资讯 07/11 22:12
2F:→ cutekid: 跟「你想要查询出来的结果」长什麽样子 07/11 22:13
3F:→ cutekid: 用个 Sample 表达出来,这样会比较好帮的上忙喔 07/11 22:13
抱歉,描述的可能不好
来源Table Discom 本来长得像这样
折扣项目 运作方式 折扣编号 起始年数 终止年数 折扣数
Ditem Oprt Disno StartPt EndPt Discnt
DC24 8437 376 1 1 60
DC24 8437 377 3 5 50
DC24 8437 378 6 99 30
DC24 96 9604 1 1 90
DC24 96 9605 2 99 55
DC25 1057 01 1 1 90
DC25 1057 02 2 4 80
DC25 1057 03 5 7 70
DC25 1057 04 8 99 60
透过Ditem跟Oprt两栏位 对应到不同业务专案的优惠级距(以年资作为级距区隔)
例如经过Ditem='DC25' AND Oprt=1027 筛选後得到原文中的
tb1
接着对得到的tb1: 将
使用年数与
StartPt及
EndPt比较
去取得对应级距的折扣数及折扣编号
接着我的想法是
利用此级距的折扣编号-1,去取得下一个级距的折扣数
简单来说,我就是想在该查询子Table
tb1中
得出两个级距对应之折扣数
※ 编辑: UCboy (210.71.217.243), 07/13/2018 10:15:47