首页 > 解决方案 > CASE WHEN 限制返回 SQL Server 2008 的行

问题描述

我有一个 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。

为什么当语句过滤掉行?

我了解到 [Dlt bevestigd] 在停止返回记录之后的行中是(空白)。我尝试通过使用 when [Dlt bevestigd] = '(blank)' Then 'no data' 来排除它,但这不起作用。使用 Cast 将 [Dlt bevestigd] 转换为 int 也不起作用。似乎(空白)值正在退出 sql 命令。

标签: sql-serversql-server-2008

解决方案


推荐阅读