如果客户每次最多只能使用1000个里程点,如何编写显示以下内容的SQL语句?

如果客户每次最多只能使用1000个里程点,如何编写显示以下内容的SQL语句?,sql,oracle,Sql,Oracle,我是SQL新手,一直在玩弄它。然而,我偶然发现了一个我似乎无法解决的问题: 如果客户每次最多只能使用1000个里程点,我如何编写SQL语句来显示他们的编号、名称和此时的可用里程(不能超过1000) 下表是我用来回答这个问题的 我正在使用SQL*Plus。任何帮助都将不胜感激!我怀疑这里可能会用到最大的(totalmiliness)函数,但我还没有弄清楚到底是如何使用的 SQL> select * from customers; CNU CNAME ACCOUNTBALANCE

我是SQL新手,一直在玩弄它。然而,我偶然发现了一个我似乎无法解决的问题:

如果客户每次最多只能使用1000个里程点,我如何编写SQL语句来显示他们的编号、名称和此时的可用里程(不能超过1000)

下表是我用来回答这个问题的

我正在使用SQL*Plus。任何帮助都将不胜感激!我怀疑这里可能会用到最大的(totalmiliness)函数,但我还没有弄清楚到底是如何使用的

SQL> select * from customers;

CNU CNAME      ACCOUNTBALANCE TOTALMILEAGE
--- ---------- -------------- ------------
101 Andy                85.25         2152
102 Betty                 170          108
103 Cindy              -55.13            3
104 David             1308.02         5510
105 Ellen               99.77        11150
106 Frank                -.02           80

您可以使用
CASE
语句返回可用英里数,如果他们有这么多或更多,则返回
1000
,如果他们有更少,则返回余额:

SELECT CNU,
       CNAME,
       ACCOUNTBALANCE,
       TOTALMILEAGE,
       CASE WHEN COALESCE(TOTALMILEAGE, 0) > 1000
            THEN 1000
            ELSE COALESCE(TOTALMILEAGE, 0) END AS USABLEMILEAGE
FROM customers

您可以使用
CASE
语句返回可用英里数,如果他们有这么多或更多,则返回
1000
,如果他们有更少,则返回余额:

SELECT CNU,
       CNAME,
       ACCOUNTBALANCE,
       TOTALMILEAGE,
       CASE WHEN COALESCE(TOTALMILEAGE, 0) > 1000
            THEN 1000
            ELSE COALESCE(TOTALMILEAGE, 0) END AS USABLEMILEAGE
FROM customers

你太棒了,非常感谢你,工作得很有魅力!我一整天都在疯狂地摆弄“最伟大的”一词;似乎我尝试了错误的命令。请注意空值:)@Joe我想说的是,表的最佳设计实践是使平衡列不可为空,但是的,我们也可以添加逻辑来处理空值。您太棒了,非常感谢您——工作得很有魅力!我一整天都在疯狂地摆弄“最伟大的”一词;似乎我尝试了错误的命令。请注意空值:)@Joe我想说,表的最佳设计实践是使平衡列不可为空,但我们也可以添加逻辑来处理空值。