将ORACLE片段组合成条件语句

问题描述:

我们在我的公司有一个会员卡数据库。该卡系统由全国两种类型的终端提供服务。问题是,两个终端对当前的点平衡进行不同的计算。将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,但收效甚微。

预先感谢您。

只需使用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