大家好,
首先感谢您尝试提供帮助。我的问题是关于:我正在尝试编写和执行以下命令的sql请求:
'CN'
的终端代码时,sql请求将返回在该终端的开头具有'CN'
的所有终端我知道生病了,可能需要在这里使用CASE
。
到目前为止,我得到了:
SELECT
sm.terminalid as terminalcode,
sm.sums as Latest_sums
FROM sums1 sm
... CASE
WHEN sm.terminalid = :p_terminal
THEN sm.sums = (
SELECT max(ss.sums) from sums ss WHERE ss.terminalid = :p_terminal
)
WHEN sm.terminalid = :p_terminal AND :p_terminal LIKE 'CN%'
THEN sm.sums = (
SELECT sm1.sums FROM sums1 sm1 WHERE sm1.terminalid = :p_terminal
AND :p_terminal LIKE 'CN%'
)
ELSE 'Incorrect Terminal ID'
END
任何人都可以帮我解决问题,因为输入CN
时选择不会返回多个结果。
如果有人对此任务有更好的解决方案,请随时分享。
谢谢。
答案 0 :(得分:0)
对我来说,您选择记录的逻辑应在WHERE
子句中表示为条件,例如:
(:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)
当给定参数的外观以'CN'
开头时,这将选择terminalid
以'CN'
开头的所有记录。否则,它选择terminalid
等于参数的记录。
查询:
SELECT
sm.terminalid as terminalcode,
sm.sums as Latest_sums
FROM sums1 sm
WHERE
(:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)
答案 1 :(得分:0)
SELECT sm.terminalid as terminalcode, sm.sums as sums,
FROM sums sm
WHERE sm.terminalid LIKE :p_terminal || '%'