0
저장 프로 시저에서 예상되는 결과를 계산하는 스크립트를 만들려고합니다. BatchId를 공유하는 sp와 관련된 여러 테이블이 있습니다. x_NonFullTimeEmployees
은 길이가 MeasurementStartDate
과 MeasurementStartDate
사이의 길이와 동일한 StatusString
열을가집니다. I.E. 7 일 동안 'TAAAAAA'
처럼 보일 수 있습니다. 같은 기간에 타임 카드를 선택하고 그 값을 합산합니다. 내 문제는 StartDate가 StatusString에서 'A'로 표시되는 날의 TimeCard 값만 사용하려는 것입니다. 어떻게해야합니까?날짜 범위 내의 요일을 기준으로 하위 문자열을 선택하는 방법
DECLARE @batchid INT = 1;
WITH CTE_ACTIVENFS
AS
(
select e.EmployeeId,e.OrganizationId,e.MeasurementStartDate, e.MeasurementEndDate
from x_VHEActiveNonFullTimeEmployees e
where BatchId = @batchid
)
,
CTE_RESULTS
AS
(
SELECT tc.OrganizationId ,tc.EmployeeId, SUM(tc.workhour) AS "Total Paid Hours",
DATEDIFF(month, (SELECT TOP 1 StartDate FROM TimeCard WHERE EmployeeId = tc.EmployeeId),(SELECT TOP 1 StartDate FROM TimeCard WHERE EmployeeId = tc.EmployeeId ORDER BY StartDate DESC))
AS "Total Paid Period",
SUM(tc.workhour)/ DATEDIFF(month, (SELECT TOP 1 StartDate FROM TimeCard WHERE EmployeeId = tc.EmployeeId),(SELECT TOP 1 StartDate FROM TimeCard WHERE EmployeeId = tc.EmployeeId ORDER BY StartDate DESC))
AS "Average Worked Hours"
FROM TimeCard tc INNER JOIN CTE_ACTIVENFS hire ON hire.EmployeeId = tc.EmployeeId
WHERE tc.EmployeeId IN (SELECT EmployeeId FROM CTE_ACTIVENFS)
AND tc.StartDate BETWEEN (SELECT TOP 1 MeasurementStartDate FROM CTE_ACTIVENFS) AND (SELECT TOP 1 MeasurementEndDate FROM CTE_ACTIVENFS)
AND tc.OrganizationId = (SELECT TOP 1 OrganizationId FROM CTE_ACTIVENFS)
GROUP BY tc.EmployeeId, tc.OrganizationId
)
SELECT * FROM CTE_RESULTS
감사의 말투, 죄송합니다. 난 그냥 내 SQL 훈련을 시작하고있다 –
당신은 조인에 대해 자세히 설명해 주 시겠어요 –
@AntarrByrd 예를 들어'어디서 ... 그리고 tc.OrganizationId = (SELECT TOP 1 OrganizationId CTE_ACTIVENFS)'는'FROM TimeCard tc INNER JOIN CTE_ACTIVENFS hire ON ... 그리고 tc.OrganizationId = hire.OrganizationId', btw 정말 첫 번째 CTE가 필요 없다고 생각합니다. – TomT