繁体   English   中英

引用存在子查询中的值

[英]Refer to a value inside of an exists sub-query

我正在建立一个使用子查询的查询。 当子查询返回一个值时,我想返回该值,如果子查询什么都不返回,我想返回今天的日期。 问题是,当子查询具有值时,我不知道如何引用我想返回的列。 在这种情况下,effDate:

SELECT 
CASE WHEN exists(SELECT TOP 1 pp.Period_End_Date [effDate]
FROM Employee ee WITH (NOLOCK)
INNER JOIN PayPlanner pp WITH (NOLOCK) ON ee.ClientID = pp.ClientID
    AND ee.PaygroupUID = pp.PaygroupUID
WHERE ee.ClientID = 85845
    AND pp.ClientID = 85845
    AND ee.EmpUID = 133066325953730
    AND ee.m_eff_end_date IS NULL
    AND pp.m_eff_end_date IS NULL
    AND pp.Payroll_Status IN ('E','I')
    AND pp.Date_Type IN ('R','A')
ORDER BY Period_End_Date) then ???HOW TO ACCESS effDate HERE???
ELSE GETDATE()
END

您无法访问这些子查询中的列。 您似乎想要最大日期(如果存在)或当前日期。 而是使用带有COALESCE()的聚合查询:

SELECT COALESCE(MIN(pp.Period_End_Date), GETDATE()) as [effDate]
FROM Employee ee WITH (NOLOCK)
INNER JOIN PayPlanner pp WITH (NOLOCK) ON ee.ClientID = pp.ClientID
    AND ee.PaygroupUID = pp.PaygroupUID
WHERE ee.ClientID = 85845
    AND pp.ClientID = 85845
    AND ee.EmpUID = 133066325953730
    AND ee.m_eff_end_date IS NULL
    AND pp.m_eff_end_date IS NULL
    AND pp.Payroll_Status IN ('E', 'I')
    AND pp.Date_Type IN ('R', 'A')

注意:您的查询似乎需要最小期间结束日期。 我实际上期望最大。 但是无论如何,聚合函数都是MIN()

一种方法是将EXISTS子查询封装在COALESCE中:

SELECT  COALESCE(( SELECT TOP 1
                            pp.Period_End_Date [effDate]
                   FROM     Employee ee WITH ( NOLOCK )
                            INNER JOIN PayPlanner pp WITH ( NOLOCK ) ON ee.ClientID = pp.ClientID
                                                              AND ee.PaygroupUID = pp.PaygroupUID
                   WHERE    ee.ClientID = 85845
                            AND pp.ClientID = 85845
                            AND ee.EmpUID = 133066325953730
                            AND ee.m_eff_end_date IS NULL
                            AND pp.m_eff_end_date IS NULL
                            AND pp.Payroll_Status IN ( 'E', 'I' )
                            AND pp.Date_Type IN ( 'R', 'A' )
                   ORDER BY Period_End_Date
                 ), GETDATE());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM