繁体   English   中英

将ORACLE片段合并为条件语句

[英]Combining ORACLE snippets into a conditional statement

我们公司有会员卡数据库。 该卡系统由全国两种类型的终端提供服务。 麻烦的是,两个端子对当前点平衡的计数不同。

我想进行一个查询,该查询首先按日期查找单个用户的交易列表的最后一行,然后检查终端的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

terminal_id以“ AGHUPR9”开头时,它将使用card_balance ,否则将使用card_balance+total_points ,在两种情况下都在名为“ card_balance”的列中返回答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM