[英]Combining ORACLE snippets into a conditional statement
我们公司有会员卡数据库。 该卡系统由全国两种类型的终端提供服务。 麻烦的是,两个端子对当前点平衡的计数不同。
我想进行一个查询,该查询首先按日期查找单个用户的交易列表的最后一行,然后检查终端的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
当terminal_id
以“ AGHUPR9”开头时,它将使用card_balance
,否则将使用card_balance+total_points
,在两种情况下都在名为“ card_balance”的列中返回答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.