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

时间:2016-01-21 14:15:38

标签: sql oracle plsql

我有以下表格:

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

}

因此,我知道如何对此进行编码

2 个答案:

答案 0 :(得分:0)

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

    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

编辑)为未借用的文件添加了一个联盟。

答案 1 :(得分:0)

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

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