Sql 将ORACLE代码段组合到条件语句中

Sql 将ORACLE代码段组合到条件语句中,sql,oracle,conditional,Sql,Oracle,Conditional,我们公司有一个忠诚卡数据库。卡系统由全国两种类型的终端提供服务。问题是,两个端子对当前点平衡的计数不同 我想做一个查询,首先按日期查找单个用户交易列表的最后一行,然后检查终端的ID,并根据ID返回同一行的卡余额 两种类型的端子可以表示为: terminal_id LIKE 'AGHUPR9%' terminal_id LIKE 'AGHUPR7%' AGHUPR9%的用户只需从名为card\u balance的列中获取余额。 AGHUPR7%的人需要对卡余额和总积分列进行求和才能得到当前余额

我们公司有一个忠诚卡数据库。卡系统由全国两种类型的终端提供服务。问题是,两个端子对当前点平衡的计数不同

我想做一个查询,首先按日期查找单个用户交易列表的最后一行,然后检查终端的ID,并根据ID返回同一行的卡余额

两种类型的端子可以表示为:

terminal_id LIKE 'AGHUPR9%'
terminal_id LIKE 'AGHUPR7%'
AGHUPR9%的用户只需从名为card\u balance的列中获取余额。 AGHUPR7%的人需要对卡余额总积分列进行求和才能得到当前余额

我编写了查询的主要部分,但我对ORACLE不够熟悉,因此不知道如何在语法上组合它们。这就是我要感谢你的帮助。下面是我想到的,我不确定需要的代码

SELECT *
FROM
(SELECT terminal_id
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
如果上述语句返回以AGHUPR9开头的终端id,执行此操作

SELECT *
FROM
(SELECT card_balance
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
SELECT *
FROM
(SELECT card_balance+total_points
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
如果第一条语句返回一个以AGHUPR7开头的终端id,则改为执行此操作

SELECT *
FROM
(SELECT card_balance
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
SELECT *
FROM
(SELECT card_balance+total_points
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
如何将它们组合到工作查询中?我尝试使用案例,但收效甚微


提前谢谢。

只需使用案例陈述即可

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

终端id
以“AGHUPR9”开头时,将使用
卡余额
,否则将使用
卡余额+总分
,在任何情况下都将在名为“卡余额”的列中返回答案。

。这看起来很完美,正是我一直在寻找的。非常感谢你,马特。