[SQL ] Oracle DB的With-as用法

看板Database作者 (遊戲boy)時間6年前 (2018/07/11 18:41), 5年前編輯推噓1(102)
留言3則, 1人參與, 6年前最新討論串1/1
資料庫名稱: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
要不要直接把「來源 table」有哪些資訊
07/11 22:12, 1F

07/11 22:13, 6年前 , 2F
跟「你想要查詢出來的結果」長什麼樣子
07/11 22:13, 2F

07/11 22:13, 6年前 , 3F
用個 Sample 表達出來,這樣會比較好幫的上忙喔
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: 將使用年數StartPtEndPt比較 去取得對應級距的折扣數及折扣編號 接著我的想法是 利用此級距的折扣編號-1,去取得下一個級距的折扣數 簡單來說,我就是想在該查詢子Table tb1中 得出兩個級距對應之折扣數 ※ 編輯: UCboy (210.71.217.243), 07/13/2018 10:15:47
文章代碼(AID): #1RHTxLuT (Database)