【发布时间】:2019-10-04 18:43:37
【问题描述】:
我有以下查询,它可以让我得到至少有两行 COVERAGE_ELECT = 'E' 并且计划类型为 49 的 EMPLID。
WITH Coverage_CTE (EMPLID, COVERAGE_ELECT)
AS
(
SELECT EMPLID, COUNT(COVERAGE_ELECT)
FROM PS_SAVINGS_PLAN
WHERE COVERAGE_ELECT = 'E'
AND PLAN_TYPE = '49'
GROUP BY EMPLID
HAVING COUNT(COVERAGE_ELECT) > 1
)
, Emp_CTE (EMPLID)
AS
(
select distinct EMPLID from Coverage_CTE
)
SELECT SP.EMPLID, SP.PLAN_TYPE, SP.EFFDT, SP.COVERAGE_ELECT, SP.SAVINGS_COVRG, SP.FLAT_DED_AMT, SP.PCT_GROSS
FROM PS_SAVINGS_PLAN as SP
WHERE SP.EMPLID IN (Select EMPLID from Emp_CTE)
AND SP.COVERAGE_ELECT = 'E'
AND PLAN_TYPE = '49'
这似乎工作正常,但是我想进一步过滤结果,仅包含EMPLID 没有行且有效日期大于最大EFFDT 的行上面选择的 E' 行 是“W”或“T”。
上述查询当前有EMPLID 5423H 的行(因为您看到的这个人有超过1 行COVERAGE_ELECT = 'E' 行(3))。但是,您会看到此人有两行,COVERAGE_ELECT 等于 T 和 W,EFFDT 大于最大 EFFDT 'E' 行 (2018-10-01) 的生效日期。
EMPLID PLAN_TYPE EFFDT COVERAGE_ELECT
5423H 49 2013-01-01 W
5423H 49 2015-10-02 E
5423H 49 2015-10-09 T
5423H 49 2016-09-29 E
5423H 49 2018-10-01 E
5423H 49 2018-10-07 T
5423H 49 2018-11-14 W
因此,您在此示例中看到了这两种情况 - 1. 此 EMPLID 的“T”行大于 (2018-10-07) 最大 EFFDT“E”行 (2018-10-01) 和2. 他们有一排 'W' 大于 (2018-11-14) 最大 EFFDT 'E' 行。如果其中任何一种情况为真,那么我不希望它们导致我上面的查询。我希望将此附加逻辑构建到上述查询中。我希望这是有道理的..
【问题讨论】:
-
。 .你的问题真的很复杂,很难理解。更是如此,因为您的原始查询不是实现逻辑的好方法。我可能会建议您从一个新问题开始,询问如何重新实现您的查询。
-
Emp_CTE 似乎毫无意义。 Coverage_CTE 按 EMPLID 分组,所以我认为 DISTINCT 是多余的。
标签: sql sql-server-2014