2016-07-26 138 views
0

我是很新的SQL,所以我很抱歉如果这是一个简单的问题或者我的代码不正确。 我有一个数据集(让我们称之为员工数字),我已经有一个查询。它有2400多个结果。 I'n Oracle 10g上SQL:如果存在值,则返回Y

我有2个问题:

  1. 查询具有笛卡儿积的问题。我只需要选择语句中的字段的最近记录

  2. 我需要查找其中有多少人在表JOB中有一行的值为REH(重新雇佣)的SYSADM.PS_JOB.ACTION_REASON字段。我不需要从下面的查询中返回REH记录信息,只是简单的Y或N。

我不知道该怎么做。

这是我的查询到目前为止。

SELECT a.paygroup, a.EMPLID, a.FILE_NBR, c.name, e.TLM_STATUS, b.rehire_dt  
as "Emplmnt_Rltd_Dtes-Rehire Date" 
FROM PS_EMPLOYMENT b 

inner join SYSADM.PS_JOB a 
on a.emplid = b.emplid 

inner join SYSADM.PS_PERSONAL_DATA c 
    on a.emplid = c.emplid 

inner join SYSADM.PS_SMS_SUBSCRB_TBL d 
on a.paygroup = d.SUBSCRIBER_ID 

Inner join PORTAL.PS_TS_EMPL_TLM_STATUS e 
    on a.emplid = e.emplid 

where 

b.rehire_dt IS NOT NULL 
and d.EFFDT = (select max (d2.effdt) from PS_SMS_SUBSCRB_TBL d2 where  
    d.SUBSCRIBER_ID = d2.SUBSCRIBER_ID) 
and e.EFFDT = (select max (e2.effdt) from PORTAL.PS_TS_EMPL_TLM_STATUS e2  
    where e.emplid = e2.EMPLID) 
and d.EFF_STATUS <> 'T' 

order by a.paygroup, a.emplid 

感谢您的帮助!

亲切的问候, 克雷格

+2

什么乱七八糟的......右外加入...执行作为内加入... – jarlh

+0

有趣的是,我原本是将它作为一个正确的外部连接,但是这并没有改变结果。 –

+0

连接字段是否是唯一列 –

回答

0

明白了..只是改变了select语句这个

Select a.paygroup, a.EMPLID, a.FILE_NBR, c.name, e.TLM_STATUS, b.rehire_dt as 
"Emplmnt_Rltd_Dtes-Rehire Date", 
    CASE 
    WHEN a.ACTION_REASON = 'REH' THEN 'Y' 
    ELSE 'N' 
    END 
FROM PS_EMPLOYMENT b --no effective dated rows 
相关问题