计算列值更改的记录数的逻辑
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 子句中删除,尽管它们在那里并没有真正伤害任何东西。
在下面的查询中,我尝试计算
将 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 子句中删除,尽管它们在那里并没有真正伤害任何东西。