2011-09-05 12 views
0

我們在我的公司有一個會員卡數據庫。該卡系統由全國兩種類型的終端提供服務。問題是,兩個終端對當前的點平衡進行不同的計算。將ORACLE片段組合成條件語句

我想查詢首先按日期查找單個用戶事務列表的最後一行,然後檢查終端的ID,並根據ID是什麼從同一行返回卡餘額。

兩種類型的終端,可以這樣表示:

terminal_id LIKE 'AGHUPR9%' 
terminal_id LIKE 'AGHUPR7%' 

的AGHUPR9%的人從一列取得平衡簡稱card_balance。 AGHUPR7%的需要總和card_balancetotal_points列以獲得當前餘額。

我寫的查詢的主要部分,但我不熟悉不夠與ORACLE,所以我不知道如何將它們結合語法。這是我很感激你的幫助。下面是我想到的,其中有我不確定所需代碼的意見。

SELECT * 
FROM 
(SELECT terminal_id 
FROM ag_tranzakcio 
WHERE cardnumber = '9348722610095185' 
ORDER BY tran_date DESC) 
WHERE ROWNUM = 1 

如果上述語句返回開始AGHUPR9一個TERMINAL_ID,做到這一點

SELECT * 
FROM 
(SELECT card_balance 
FROM ag_tranzakcio 
WHERE cardnumber = '9348722610095185' 
ORDER BY tran_date DESC) 
WHERE ROWNUM = 1 

如果第一個語句返回開始AGHUPR7一個TERMINAL_ID,做到這一點而不是

SELECT * 
FROM 
(SELECT card_balance+total_points 
FROM ag_tranzakcio 
WHERE cardnumber = '9348722610095185' 
ORDER BY tran_date DESC) 
WHERE ROWNUM = 1 

如何將它們組合成正在運行的查詢?我正嘗試使用CASE,但收效甚微。

預先感謝您。

回答

1

只需使用CASE語句。

SELECT * 
FROM 
(SELECT 
    CASE 
    WHEN terminal_id LIKE 'AGHUPR9%' THEN card_balance 
    ELSE card_balance+total_points 
    END AS card_balance 
FROM ag_tranzakcio 
WHERE cardnumber = '9348722610095185' 
ORDER BY tran_date DESC) 
WHERE ROWNUM = 1 

這將使用card_balanceterminal_id開始與「AGHUPR9」,否則將使用card_balance+total_points,返回一個在任何情況下名爲「card_balance」列中的答案。

+0

可愛的。這看起來很完美,正是我一直在尋找的。非常感謝,馬特。 – Andrew