Sea*_*een 6 sql oracle gaps-and-islands
我正在尝试创建一个检查缺少的人工交易的视图.该视图将被提供给Crystal报表.
在这种情况下,视图应该采用sysdate + 30和sysdate -30之间的所有日期,然后应该为每个日期的活动员工留下外部联接所有人工记录.然后,它计算每个员工每个日期的人工交易数量.
这将传递给Crystal Report,Crystal Report将根据特定日期范围(视图在+/- 30范围内)进行过滤.从那里,Crystal中每位员工的总计数将总计,员工将显示零交易.
在没有吐出每个日期的列表的情况下,最初,我正在为每个日期使用人工交易,但有些日期没有任何计数.这些人显示空交易日期为零小时.这表明他们在整个期间都没有收费,这是有道理的.
但是,当Crystal对该数据进行过滤并选择范围时,我相信它会遗漏这些空值,因此不允许我显示没有时间提交的所有人.
有没有办法在视图中执行"选择(sysdate + 30)和(sysdate-30)之间的每个日期",以便我可以使用它来比较所有时间?
SELECT QUERY.LABORRECLABORCODE
, QUERY.LABORRECEMPLOYEENUM
, QUERY.PERSONRECDISPLAYNAME
, QUERY.TRANSSTARTDATE
, COUNT(TRANSROWSTAMP) AS ROWCOUNT
FROM (SELECT *
FROM (SELECT LABOR.LABORCODE AS LABORRECLABORCODE
, LABOR.LA20 AS LABORRECEMPLOYEENUM
, PERSON.DISPLAYNAME AS PERSONRECDISPLAYNAME
FROM LABOR
LEFT OUTER JOIN PERSON
ON ( LABOR.LABORCODE = PERSON.PERSONID )
WHERE LABOR.STATUS = 'ACTIVE'
AND LABOR.LA20 IS NOT NULL
AND PERSON.DISPLAYNAME IS NOT NULL
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%kimball%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%electrico%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%misc labor cost adj%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossoit%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossiot%')PERSONINFO
LEFT OUTER JOIN (SELECT STARTDATE AS TRANSSTARTDATE
, LABORCODE AS TRANSLABORCODE
, ROWSTAMP AS TRANSROWSTAMP
FROM LABTRANS
WHERE STARTDATE BETWEEN ( SYSDATE - 30 ) AND ( SYSDATE + 30 ))LABTRANSLIMITED
ON ( PERSONINFO.LABORRECLABORCODE = LABTRANSLIMITED.TRANSLABORCODE ))QUERY
GROUP BY LABORRECLABORCODE
, TRANSSTARTDATE
, LABORRECEMPLOYEENUM
, PERSONRECDISPLAYNAME
ORDER BY LABORRECLABORCODE
, TRANSSTARTDATE
;
Run Code Online (Sandbox Code Playgroud)
Dav*_*sta 17
select trunc(sysdate)+31-level from dual connect by level <=61
Run Code Online (Sandbox Code Playgroud)
这是生成任意值列表的好方法.
| 归档时间: |
|
| 查看次数: |
5390 次 |
| 最近记录: |