查询未选择正确的员工结束日期

时间:2019-01-15 02:51:44

标签: sql ms-access

我有MS Access查询(在SQL视图中)无法识别最后一位- AND(((dbo_EMTER.TER_DATE)为空或(dbo_EMTER.TER_DATE)>“ 12/31/2018”));

该列主要用于查看系统中没有结束日期或在2018年12月31日之后具有终止日期的员工,但是我的查询正在拾取没有结束日期的记录以及2018年12月31日之前的记录

下面是我的完整查询(正在寻找一年中请病假的员工),有人可以让我知道发生了什么事吗?

SELECT dbo_EMDET.DET_NUMBER, dbo_EMDET.DET_G1_NAME1, 
dbo_EMDET.DET_SURNAME, 
dbo_EMDET.DET_DATE_JND, dbo_EMPOS.POS_PDT_HRS, dbo_EMPOS.POS_AV_HR_WK, 
dbo_EMPOS.POS_DAYS_WK, [POS_AV_HR_WK]/[POS_DAYS_WK] AS [average hours in 
day], [LVE_HOUR_TKN]/[average hours in day] AS [average day taken], 
dbo_EMLVE.LVE_HOUR_TKN, dbo_EMLVE.LVE_DAY_TAKE, dbo_EMLVE.LVE_START, 
dbo_EMLVE.LVE_END, dbo_EMLVE.LVE_TYPE_CD, dbo_EMPAY.DET_NUMBER, 
dbo_EMPAY.PYD_COMPANY, dbo_EMPOS.POS_START, dbo_EMPOS.POS_END, 
dbo_EMPOS.POS_L0_CD, dbo_EMPOS.POS_L1_CD, dbo_EMPOS.POS_L2_CD, 
dbo_EMPOS.POS_L3_CD, dbo_EMPOS.POS_L4_CD, dbo_EMPOS.POS_L5_CD, 
dbo_EMPOS.POS_L6_CD, dbo_EMPOS.POS_ALT_CD1, dbo_EMPOS.POS_ALT_CD2, 
dbo_EMPOS.POS_STATUS, [Translation Table].[Code Description], 
dbo_EMPOS.POS_PDT_STAT, dbo_EMTER.TER_DATE, 
IIf(Left([POS_L5_CD],1)="G","Core","Other") AS [Staff Grouping]

FROM ((((dbo_EMDET LEFT JOIN dbo_EMLVE ON dbo_EMDET.DET_NUMBER = 
dbo_EMLVE.DET_NUMBER) LEFT JOIN dbo_EMPAY ON dbo_EMDET.DET_NUMBER = 
dbo_EMPAY.DET_NUMBER) INNER JOIN [max position 2] ON dbo_EMDET.DET_NUMBER = 
[max position 2].DET_NUMBER) INNER JOIN (dbo_EMPOS LEFT JOIN [Translation 
Table] ON dbo_EMPOS.POS_STATUS = [Translation Table].Name) ON ([max position 
2].DET_NUMBER = dbo_EMPOS.DET_NUMBER) AND ([max position 2].MaxOfPOS_START = 
dbo_EMPOS.POS_START)) LEFT JOIN dbo_EMTER ON dbo_EMDET.DET_NUMBER = 
dbo_EMTER.DET_NUMBER

WHERE (((dbo_EMLVE.LVE_START)>"01/01/2018" And (dbo_EMLVE.LVE_START) 
<"12/31/2018") AND ((dbo_EMLVE.LVE_TYPE_CD)="SIC" Or 
(dbo_EMLVE.LVE_TYPE_CD)="DOM" Or (dbo_EMLVE.LVE_TYPE_CD)="ACC" Or 
(dbo_EMLVE.LVE_TYPE_CD)="WCME" Or (dbo_EMLVE.LVE_TYPE_CD)="WCMN" Or 
(dbo_EMLVE.LVE_TYPE_CD)="WCM2" Or (dbo_EMLVE.LVE_TYPE_CD)="WCM" Or 
(dbo_EMLVE.LVE_TYPE_CD)="SLWP" Or (dbo_EMLVE.LVE_TYPE_CD)="SPEC" Or 
(dbo_EMLVE.LVE_TYPE_CD)="SWOP") AND ((dbo_EMPAY.PYD_COMPANY)="PS" Or 
(dbo_EMPAY.PYD_COMPANY)="PSC") AND ((dbo_EMPOS.POS_L3_CD)<>"CGS") AND 
((dbo_EMPOS.POS_STATUS)<>"C") AND ((dbo_EMTER.TER_DATE) Is Null Or 
(dbo_EMTER.TER_DATE)>"12/31/2018"));

如果您需要进一步了解其他信息,请提供帮助。

感谢团队:)

1 个答案:

答案 0 :(得分:0)

可能您的“日期”不是日期值,而是文本,因此无法按预期进行过滤。

如果使用 DateTime2 和旧的 SQL Server ODBC驱动程序,则会发生这种情况。因此,请使用数据类型 DateTime 或使用 SQL Server Native Client 11.0 或更高版本。