[SQL ] Oracle DB的With-as用法
資料庫名稱: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://www.ptt.cc/bbs/Database/M.1531305685.A.E1D.html
推
07/11 22:12,
6年前
, 1F
07/11 22:12, 1F
→
07/11 22:13,
6年前
, 2F
07/11 22:13, 2F
→
07/11 22:13,
6年前
, 3F
07/11 22:13, 3F
抱歉,描述的可能不好
來源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
Database 近期熱門文章
PTT數位生活區 即時熱門文章