ПРИМЕР, КОГДА ограничивает строки, которые возвращаются SQL Server 2008 - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть файл Excel, из которого я импортирую данные с помощью команды SQL Server.Команда работает нормально, но, похоже, она отфильтровывает данные, когда я использую конкретный оператор case.Я не могу найти в Интернете ничего о CASE, фильтрующем строки, поэтому я решил спросить здесь.

Этот код возвращает около 8000 строк

SET DATEFIRST 1;

SELECT 
    *,
    CASE 
       WHEN [Artikelnummer] = 'Extern' 
          THEN [Artikel SFC] 
          ELSE [Artikel Omschrijving] 
    END AS [Artikel Omschrijving 2],
    date.DifInDays([Actueel Geplande Leverdatum], [Geplande Leverdatum]) AS [Te Laat Dagen],
    date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5 AS [Gevraagde Dlt],
FROM 
    I_TN_Exp_PUR_tdpur041_004_2
WHERE 
    [bedrijf] = 103;

Этот код возвращает только ~ 70 строк.

SET DATEFIRST 1;

SELECT 
    *,
    CASE 
       WHEN [Artikelnummer] = 'Extern' 
          THEN [Artikel SFC] 
          ELSE [Artikel Omschrijving] 
    END AS [Artikel Omschrijving 2],
    date.DifInDays([Actueel Geplande Leverdatum], [Geplande Leverdatum]) AS [Te Laat Dagen],
    date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5 AS [Gevraagde Dlt],
    CASE
       WHEN (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) >= [levertijd ITM]
             AND (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) >= [dlt bevestigd] 
          THEN 'OK'
       WHEN (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) >= [levertijd ITM]
             AND (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) < [dlt bevestigd] 
          THEN 'NOK'
       WHEN (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) < [levertijd ITM]
             AND (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) >= [dlt bevestigd] 
          THEN 'OK+'
       WHEN (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) < [levertijd ITM]
             AND (date.DifInDays([Geplande Leverdatum], [Orderdatum]) / 7 * 5) < [dlt bevestigd] 
          THEN 'OK/NOK'
       ELSE 'NOK'
    END AS [doorlooptijdcheck]
FROM
    I_TN_Exp_PUR_tdpur041_004_2
WHERE 
    [bedrijf] = 103;

Оператор case используется для создания значения, которое может бытьфильтруется в документе ([doorlooptijdcheck]).

Для определенных значений назначается либо OK / NOK / OK + / NOK | OK.

Почему оператор when отфильтровывает строки?

Я узнал, что [Dlt bevestigd] (пусто) в строке, после чего он прекращает возвращать записи.Я пытался исключить его с помощью когда [Dlt bevestigd] = '(пусто)' Тогда «нет данных», но это не сработало.преобразование [Dlt bevestigd] в int с Cast также не работает.Похоже, что (пустое) значение выходит из команды sql.

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