У меня есть файл 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.