计算列值更改的记录数的逻辑

Logic to calculate the number of records for change in a column value

在下面的查询中,我尝试计算

将 FTE 状态从活跃更改为不活跃或相反的不同员工数

之间

报告月份日期“2015-01-01”和“2015-06-30”

终止日期 >='2015-01-01' 或终止日期为空

区域是 NAM。

我得到了 770 条记录,但它应该是 606.I我不确定我的查询中的逻辑是否提前 correct.Thanks!

  SELECT A.[First Name]
    ,A.[Last Name]
FROM (
    (
        SELECT [First Name]
            ,[Last Name]
            ,[Report Month]
            ,[Region]
            ,[Date of FTE Termination]
        FROM dbo.Data
        WHERE (
                [Report Month] BETWEEN '2015-01-01'
                    AND '2015-06-30'
                AND (
                    [FTE Status] = 'Inactive'
                    OR [FTE Status] = 'Active'
                    )
                AND (
                    [Date of FTE Termination] >= '2015-01-01'
                    OR [Date of FTE Termination] IS NULL
                    )
                AND [Region] = 'NAM'
                )
        ) A INNER JOIN (
        SELECT [First Name]
            ,[Last Name]
            ,[Report Month]
            ,[Bill To Code]
            ,[Region]
            ,[Date of FTE Termination]
        FROM dbo.Data
        WHERE (
                [Report Month] BETWEEN '2015-01-01'
                    AND '2015-06-30'
                AND (
                    [FTE Status] = 'Active'
                    OR [FTE Status] = 'Inactive'
                    )
                AND (
                    [Date of FTE Termination] >= '2015-01-01'
                    OR [Date of FTE Termination] IS NULL
                    )
                AND [Region] = 'NAM'
                )
        ) B ON A.[First Name] = B.[First Name]
        AND A.[Last Name] = B.[Last Name]
    )
GROUP BY A.[First Name]
    ,A.[Last Name]
ORDER BY A.[First Name] ASC

您的联接不会强制联接的行具有相反的 FTE 状态。

你需要改成这样:

ON A.[First Name] = B.[First Name]
AND A.[Last Name] = B.[Last Name]
AND (
  (A.[FTE Status] = 'Active' AND B.[FTE Status] = 'Inactive')
OR (A.[FTE Status] = 'Inactive' AND B.[FTE Status] = 'Active')
)

然后通过将这些条件添加到 JOIN 中,您可以将它们从 WHERE 子句中删除,尽管它们在那里并没有真正伤害任何东西。