You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle运行时按输入年份展示不重复数据(含设施与预订表)

Oracle:按指定年份查询不重复关联数据解决方案

针对你需要在Oracle环境中根据输入年份展示不重复相关数据的需求,结合你给出的设施表和预订表结构及样本数据,我整理了几种实用的SQL实现方案:


先明确表结构与样本数据

设施表(FacilityTable)

FACILITYNOFACILITYNAME
FACNO01卫生间
FACNO02员工办公室
FACNO03校长办公室
FACNO04科学实验室
FACNO05数学实验室
FACNO06计算机实验室
FACNO07生物实验室
FACNO08化学实验室

预订表(BookingTable)

FACILITYNObookingIDuserIDTimebooked
FACNO011000310-May-2016
FACNO042000110-May-2018
FACNO053000110-Apr-2017
FACNO014000110-Apr-2017
FACNO025000310-Jan-2011
FACNO046000610-Apr-2018
FACNO067000310-Apr-2016
FACNO078000610-Apr-2015

具体解决方案

1. 获取指定年份有预订的不重复设施

如果你的需求是找出某一年被预订过的所有设施,且同一个设施不管被预订多少次只显示一次,用这个SQL:

SELECT DISTINCT f.FACILITYNO, f.FACILITYNAME
FROM FacilityTable f
JOIN BookingTable b ON f.FACILITYNO = b.FACILITYNO
WHERE EXTRACT(YEAR FROM b.Timebooked) = :input_year;

关键点说明:

  • :input_year 是你要查询的年份参数,实际使用时可以换成具体数值(比如=2017),或者用Oracle绑定变量来传入
  • DISTINCT 用来过滤重复的设施记录,避免同一个设施因多次预订重复出现
  • JOIN 只保留有对应预订记录的设施,如果你要包含所有设施(不管有没有预订),可以看下面的方案3

2. 按「设施+用户」维度获取不重复预订记录

如果需要统计某一年里,哪些用户预订了哪些设施(同一个用户同一年预订同一个设施只算一次),可以用:

SELECT DISTINCT b.FACILITYNO, f.FACILITYNAME, b.userID
FROM FacilityTable f
JOIN BookingTable b ON f.FACILITYNO = b.FACILITYNO
WHERE EXTRACT(YEAR FROM b.Timebooked) = :input_year;

要是还想顺便统计每个用户对每个设施的预订次数,用GROUP BY会更灵活:

SELECT b.FACILITYNO, f.FACILITYNAME, b.userID, COUNT(b.bookingID) AS 年度预订次数
FROM FacilityTable f
JOIN BookingTable b ON f.FACILITYNO = b.FACILITYNO
WHERE EXTRACT(YEAR FROM b.Timebooked) = :input_year
GROUP BY b.FACILITYNO, f.FACILITYNAME, b.userID;

3. 展示所有设施的年度预订状态

如果需要列出所有设施,同时标记该年份是否有过预订记录,用左连接+EXISTS子句:

SELECT f.FACILITYNO, f.FACILITYNAME,
       CASE WHEN EXISTS (
           SELECT 1 FROM BookingTable b 
           WHERE b.FACILITYNO = f.FACILITYNO 
           AND EXTRACT(YEAR FROM b.Timebooked) = :input_year
       ) THEN '已预订' ELSE '未预订' END AS 年度预订状态
FROM FacilityTable f;

内容的提问来源于stack exchange,提问作者whalesboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:02:09