【发布时间】:2021-03-12 17:09:36
【问题描述】:
在下面的查询中,我试图从表 loans 中获取同一 Uniq_ID 和同一年但上个月的 BALANCE 值,然后将其与当前行 BALANCE 值进行比较。 fdate 列看起来像 3/1/2019。我尝试按以下方式进行操作,但收到错误 "Sybase Database Error: Feature, reference containing a scalar value subquery (defined at line 13) inside a conditional expression (CASE, COALESCE, ARGN, NULLIF, or IF), is not supported"。我该如何尝试以另一种方式做到这一点?
SELECT h.UNIQUEID, f.num
(select BALANCE from loans b
where b.UNIQ_ID = h.UNIQ_ID
and year(b.FDATE) = year(h.FDATE)
and MONTH(b.fdate) = MONTH(h.fdate) - 1) AS prev_bal,
(case when prev_bal > 0 and prev_bal >= BALANCE then 1 else 0 end) as flag
FROM loans h, perform f
where f.uniq_id = h.uniq_id
编辑:
数据如下:
fdate UNIQUEID NUM BALANCE
3/1/2019 LNSAR17224-00453434 1 16254.1
4/1/2019 LNSAR17224-00453434 1 15643.2
我想添加列prev_bal,如下所示:
fdate UNIQUEID NUM BALANCE prev_bal
3/1/2019 LNSAR17224-00453434 1 16254.1 {null}
4/1/2019 LNSAR17224-00453434 1 15643.2 16254.1
预期输出:
UNIQUEID NUM prev_bal flag
LNSAR17224-00453434 1 {null} 0
LNSAR17224-00453434 1 16254.1 1
【问题讨论】:
-
示例数据和预期结果?
-
@VBoka 我添加了数据和预期结果。
-
fdate列的数据类型是什么?fdate是否存储为像3/1/2019这样的字符串?还是fdate存储为datetime数据类型,而您刚刚选择像3/1/2019一样显示它?给定月份是否只有一个fdate值,或者可能有多个值(例如,3/1/2019、3/14/2019、3/25/2019)?给定样本数据,查询的预期输出是什么? -
哪个 Sybase RDBMS 产品(ASE?IQ?SQLAnywhere?Advantage?)和版本?
-
如果当前月份是
Jan (2019),而上个月是Dec (2018),会发生什么?year() = year()测试会失败,对吧?