【问题标题】:sql query condition in oracle report IF ELSEoracle报告IF ELSE中的sql查询条件
【发布时间】:2026-01-24 09:00:01
【问题描述】:

我有以下表格:

DOCUMENT(iddoc,doctype,title,publishingdate,validTillDate)
USERS(iduser,fname,lname)
TRANSACTION(idtrans,iduser,iddoc,transdate,schedulereturndate)

我被要求说明给定文件是否可用、是否由谁借用以及何时归还。那么我怎样才能在我的查询中包含这些条件。

我的代码会是这样的:

if(d.validTillDate < SYSDATE){

SELECT u.iduser t.schedulereturndate
FROM USERS u, TRANSACTION t
WHERE u.iduser=t.iduser

}

所以我想知道如何编写代码

【问题讨论】:

  • 您能否发布一些数据,您已经尝试过的内容以及您面临的问题?
  • 1. mysql 和 oracle 是两个不同的产品。请删除不必要的标签。 2. 请提供样本数据和预期输出。 3. 请描述您迄今为止为达到预期结果所做的尝试,您遇到了什么问题。
  • 为什么要检查 validitydate 以查看项目是否可用。不应该检查schedulereturndate吗?
  • 我更正了,我希望你们明白我的意思
  • VALIDITYDATE 文档不可用的时间

标签: sql oracle plsql


【解决方案1】:

借用文档的查询是这样的:

    SELECT d.iddoc,u.iduser t.schedulereturndate,'Borrowed'
    from document d,
         ,USERS u
         ,TRANSACTION t
    WHERE u.iduser=t.iduser
    and   t.iddoc=d.iddoc
    and   d.validitydate<sysdate
    union
 SELECT d.iddoc,null,null,'Not borrowed'
    from document d,
    WHERE d.validitydate is null 
    or d.validitydate>=sysdate

Edit ) 为未借用的文档添加了一个联合。

【讨论】:

【解决方案2】:

我很难理解你的问题。 如果我猜对了,那么:

SELECT d.iddoc, u.iduser, t.schedulereturndate
FROM
    document d
    LEFT JOIN transaction t ON
        (d.iddoc=t.iddoc)
            -- join by iddoc field
        AND (SYSDATE BETWEEN t.transdate AND t.schedulereturndate)
            -- I assume we need only current transactions, not past (or future?)
WHERE
    (SYSDATE<=d.validTillDate)
        -- I assume we need only documents whose validity date not passed yet

假设 iddoc=1 没有活动事务,iddoc=2 有一个活动事务,iddoc=3 有两个活动事务,结果将如下所示:

iddoc | iduser | schedulereturndate
------+--------+-------------------
1       NULL     NULL
2       534      2017-09-08
3       54334    2016-03-02
3       2433     2016-07-01

【讨论】: