Запрос не выбирает правильную дату окончания работы персонала - PullRequest
0 голосов
/ 15 января 2019

У меня есть запрос MS Access (в представлении SQL), который не распознает последний бит - AND ((dbo_EMTER.TER_DATE) является нулевым или (dbo_EMTER.TER_DATE)> "31.12.2008"));

В этом столбце в основном рассматриваются сотрудники, у которых нет даты окончания или даты окончания в системе после 31 декабря 2018 года, однако мой запрос собирает записи без даты окончания, а также записи до 31 декабря 2018 года. .

Ниже приведен мой полный вопрос (если посмотреть на количество неработающих в течение года), может кто-нибудь сообщить мне, что происходит?

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 голосов
/ 15 января 2019

Возможно, ваши "даты" - это не значения даты , а текст , поэтому фильтрация не ожидается, как ожидалось.

Это происходит, если вы используете DateTime2 и старый SQL Server драйвер ODBC. Поэтому используйте либо тип данных DateTime , либо используйте собственный клиент SQL Server 11.0 или более поздней версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...