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 sql语句里有没有if...else...的用法,请各位大侠给个例子看看,灰常感谢!!