2015-08-18 1 views
0

В следующем запросе, я попытался вычислитьLogic рассчитать количество записей для изменения в значении столбца

числа различных сотрудников, которые изменили статус FTE из активных в неактивном или наоборот

между

датой

месяца Report '2015-01-01' и '2015-06-30'

и

датой прекращения> = '2015-01-01 'Или дата окончания является недействительным

и

область существо NAM.

Я получаю 770 записей, но должно быть 606. Я не уверен, правильно ли логика в моем запросе. Спасибо в Advance!

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 
+0

Прежде всего вам нужно рассказать нам, почему вы чувствуете, что вы должны получить 606 записей. Если вы получаете больше записей, чем думаете, что должны получить, тогда проверьте отдельную таблицу для ключа присоединения, у вас, вероятно, есть дубликаты. – Sagar

+0

Его протестировали в Excel и обнаружили, что у него 606 записей. Они оба являются одной и той же таблицей. Это встроенный запрос с различным условием. Как я исключаю дубликаты в этом запросе? –

ответ

0

Ваш JOIN не заставляет соединенные строки иметь противоположный статус 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 положений, хотя они на самом деле не больно ничего, будучи там.

+0

Спасибо, Tab, я посмотрю! –

+0

Ваша логика кажется правильной, но я получаю только 95 записей. Не уверен, почему существует огромная разница. –

+0

У вас есть дубликаты в таблице для комбинации First_name и last_name. В excel он ведет себя по-другому, мы не присоединяемся к одной таблице. Вам нужно присоединиться к таблицам по уникальному ключу из обеих таблиц. Также вы используете один и тот же встроенный выбор дважды, лучше использовать CTE – Sagar

 Смежные вопросы

  • Нет связанных вопросов^_^