oracle报告IF ELSE中的sql查询条件

Posted

技术标签:

【中文标题】oracle报告IF ELSE中的sql查询条件【英文标题】:sql query condition in oracle report IF ELSE 【发布时间】:2016-01-21 14:15:38 【问题描述】:

我有以下表格:

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 文档不可用的时间 【参考方案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 ) 为未借用的文档添加了一个联合。

【讨论】:

而且我必须指出它是否不是借来的 Implicit JOIN sintaxis 自 sql 2005 起已弃用,请改用显式 JOIN ***.com/questions/44917/… Aaron Bertrand 写了一篇很好的文章 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…【参考方案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

【讨论】:

以上是关于oracle报告IF ELSE中的sql查询条件的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程里的if else

sql中的if else条件[重复]

在oracle sql语句里有没有if...else...的用法,请各位大侠给个例子看看,灰常感谢!!

如何在 SQL 中编写 if else if 条件 |甲骨文 |

Oracle PL/SQL:创建短路查询

对于if else查询,Crystal报表会自动显示舍入值而不是十进制值