将ORACLE片段组合成条件语句
问题描述:
我们在我的公司有一个会员卡数据库。该卡系统由全国两种类型的终端提供服务。问题是,两个终端对当前的点平衡进行不同的计算。将ORACLE片段组合成条件语句
我想查询首先按日期查找单个用户事务列表的最后一行,然后检查终端的ID,并根据ID是什么从同一行返回卡余额。
两种类型的终端,可以这样表示:
terminal_id LIKE 'AGHUPR9%'
terminal_id LIKE 'AGHUPR7%'
的AGHUPR9%的人从一列取得平衡简称card_balance。 AGHUPR7%的需要总和card_balance和total_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_balance
当terminal_id
开始与“AGHUPR9”,否则将使用card_balance+total_points
,返回一个在任何情况下名为“card_balance”列中的答案。
可爱的。这看起来很完美,正是我一直在寻找的。非常感谢,马特。 – Andrew