Sql 基于字符串列从多个记录中提取记录
我的表格如下: 我需要创建一个查询,以便获得以下结果(仅突出显示的记录): 我尝试过使用下面这样的东西,但仍然得到了所有的记录,而不仅仅是突出显示的记录Sql 基于字符串列从多个记录中提取记录,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,我的表格如下: 我需要创建一个查询,以便获得以下结果(仅突出显示的记录): 我尝试过使用下面这样的东西,但仍然得到了所有的记录,而不仅仅是突出显示的记录 Select EmpPk as [User EmpPK], Activity_PK as [Activity PK], Attempt_Start_Date as [Attempt Start Date], Attempt_Completion_Date as [Attempt Completion Date], Registrati
Select EmpPk as [User EmpPK],
Activity_PK as [Activity PK],
Attempt_Start_Date as [Attempt Start Date],
Attempt_Completion_Date as [Attempt Completion Date],
Registration_Status as [Registration Status],
Attendance_Status as [Attendance Status],
EstCrdHrs
From Employee_Activity
Where ((Attendance_Status='In Progress' AND Registration_Status ='In Progress')
OR (Attendance_Status='Attended' AND Registration_Status ='Completed'))
您没有准确描述您希望实现的逻辑 我知道,对于每个
empk
,您都需要记录,其中attention\u status='Attended'和registration\u status='Completed'
;如果没有这样的记录,那么您需要所有其他记录
如果是这样,您可以用not exists
来表达:
select t.*
from employee_activity ea
where
(
ea.attendance_status = 'Attended'
and ea.registration_status = 'Completed'
) or not exists (
select 1
from employee_activity ea1
where
ea1.empPk = ea.empPk
and ea1.attendance_status = 'Attended'
and ea1.registration_status = 'Completed'
)
您还可以使用窗口功能:
select *
from (
select
t.*,
rank() over(
partition by empPk
order by case when attendance_status = 'Attended' and registration_status = 'Completed' then 1 else 2 end
) rn
from employee_activity
) t
where rn = 1
窗口函数
rank()
的orderby
子句将每个员工的“已完成”记录放在第一位;然后,外部查询筛选每个员工排名最靠前的记录(如果没有“完整”记录,则同一客户的所有其他记录将排在第一位)。请准确描述您希望实现的逻辑。