我在一个表中有一个ID列,其中包含员工ID字符串以及一个包含员工终止日期的列。如果员工仍处于活动状态,则为空值。
这里的问题是员工ID可以采用两种格式。如果员工在公司的多个职位上填写,那么他们的员工ID字符串的最后一个索引上会有一个字母。实施例。
05214
05214A
如果与上述ID之一相关联的终止日期中至少有一个为空,那么我想将其从选择中排除,因为这意味着它们在至少一个位置仍处于活动状态。
这是我现在没有添加功能的语句的布局。
SELECT DISTINCT p.[hr_pe_id] AS ID,
i.[SSN] AS SSN,
p.[emp_f_name] AS fname,
p.[emp_l_name] AS lname,
p.[term_dt] AS termdate
FROM [dbo].[InsurancePremiums] i
INNER JOIN [production_finance].[dbo].[hr_pe_mstr] p
ON (i.[SSN] = p.[hr_pe_ssn])
WHERE(p.[term_dt] IS NOT NULL)
答案 0 :(得分:1)
我认为这就是你想要的。注意" _" character是任何单个字符匹配的sql通配符。
SELECT DISTINCT
p.[hr_pe_id] AS ID,
i.[SSN] AS SSN,
p.[emp_f_name] AS fname,
p.[emp_l_name] AS lname,
p.[term_dt] AS termdate
FROM
[dbo].[InsurancePremiums] i
INNER JOIN [production_finance].[dbo].[hr_pe_mstr] p
ON ( i.[SSN] = p.[hr_pe_ssn] )
WHERE
( p.[term_dt] IS NOT NULL )
AND NOT EXISTS (
SELECT
*
FROM
[production_finance].[dbo].[hr_pe_mstr] p2
WHERE
p.[hr_pe_id] LIKE p2.[hr_pe_id] + '_'
AND p2.[term_dt] IS NOT NULL
)
答案 1 :(得分:0)
此语法将识别具有至少一个非终止职位的员工:
select case when ISNUMERIC(hr_pe_id) = 1
then hr_pe_id
else left(hr_pe_id, 5) end as EmployeeIDTrimmed
, max(case when Term_Dt is null then 'Y' else 'N' end) as StillEmployed
from MyTable
group by case when ISNUMERIC(hr_pe_id) = 1
then hr_pe_id
else left(hr_pe_id, 5) end