sybase sql:选择 XYZ 列中的值之和等于某个特定值的记录 - 应用于子集

问题描述 投票:0回答:1

使用Sybase SQL,我想找到满足某些简单要求(例如DEBITCREDIT == 'D')的所有记录,并且满足以下要求:这些记录的名义值之和必须等于300。

以下是屏幕截图作为示例:

在屏幕截图中,我的 select 语句的目的是选择以黄色突出显示的 RECORD_ID,即 RECORD_ID 2 和 RECORD_ID 4。(请注意,RECORD_ID 2 的 NOMINAL_VALUE + RECORD_ID 4 的 NOMINAL_VALUE = 300。)

如果不是 RECORD 6,以下代码将实现此目的:

create table RECORDS
(RECORD_ID      int
,SECURITIES_ID  char(1)
,DEBITCREDIT    char(1)
,NOMINAL_VALUE  int
,BOOKING_ID     int
)
go

insert RECORDS values (1,'A','C',100,10)
insert RECORDS values (2,'B','D',100,20)
insert RECORDS values (3,'B','C',100,30)
insert RECORDS values (4,'B','D',200,40)  
insert RECORDS values (5,'C','D', 50,50)
insert RECORDS values (6,'B','D',  1,60)
go


select RECORD_ID,
       BOOKING_ID
from   RECORDS
where  SECURITIES_ID = 'B'
and    DEBITCREDIT   = 'D'
group by SECURITIES_ID, 
         DEBITCREDIT
having sum(NOMINAL_VALUE) = 300
order by 1,2

go

由于 RECORD 6,所有(SECURITIES_ID = 'B' 且 DEBITCREDIT = 'D')条目的总和(NOMINAL_VALUE)为 301(而不是 300)。

如何选择满足以下所有条件的所有条目(即使这些条件仅适用于子集):SECURITIES_ID = 'B'、DEBITCREDIT = 'D' 且 sum(NOMINAL_VALUE) = 300

P.S.:这个问题是以下问题的后续问题:sybase sql:选择 XYZ 列中的值之和等于某个特定值的记录

sql aggregate-functions sybase
1个回答
0
投票

这应该使用窗口函数来完成

WITH CTE as(
select RECORD_ID,
       BOOKING_ID,
  SUM(NOMINAL_VALUE) OVER(ORDER BY RECORD_ID) sumes
from   RECORDS
where  SECURITIES_ID = 'B'
and    DEBITCREDIT   = 'D')
select RECORD_ID,
       BOOKING_ID FROM CTE WHERE sumes >= 300
记录_ID BOOKING_ID
4 40
6 60

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.