我如何检查该值是否存在以及 return 不同的值取决于答案?

How can i check if the value exists and return different values depending on the answer?

首先让我解释一下我目前使用的查询。

作为示例,此查询 returns 值 '357 kg':

SELECT TOP 1 
     CONCAT(POCI.Value,' kg')
FROM 
     ProductionOrder PO
          LEFT JOIN Product P ON P.ProductionOrderId = PO.ProductionOrderId
          LEFT JOIN ProductionOrderConfiguration POC ON POC.ProductionOrderConfigurationId = PO.ProductionOrderConfigurationId 
          LEFT JOIN ProductionOrderConfigurationItem POCI ON POCI.ProductionOrderConfigurationId = POC.ProductionOrderConfigurationId
WHERE 
     P.ProductId = #ProductId# AND POCI.Name = 'C_VIKTA'

问题是有时 POCI.Name (C_VIKTA) 不存在于记录中,因此它的值 (POCI.Value) 没有得到 returned。 所以我想让下面的逻辑起作用,我知道它可以用 CASE 和 EXISTS 来解决,但我就是不让它起作用..

我要的结果是IF POCI.Value exists return CONCAT(POCI.Value,'kg') ELSE return 'N/A'。任何人都知道如何解决这个问题?

如果您还需要了解其他信息以便帮助我,请告诉我!

BR,

米克

我建议您将 AND POCI.Name = 'C_VIKTA' 从 where 子句移动到左连接,如下所示

SELECT TOP 1 
     case when POCI.Value is not null then CONCAT(POCI.Value,' kg') else '' end
FROM 
     ProductionOrder PO
          LEFT JOIN Product P ON P.ProductionOrderId = PO.ProductionOrderId
          LEFT JOIN ProductionOrderConfiguration POC ON POC.ProductionOrderConfigurationId = PO.ProductionOrderConfigurationId 
          LEFT JOIN ProductionOrderConfigurationItem POCI ON POCI.ProductionOrderConfigurationId = POC.ProductionOrderConfigurationId AND POCI.Name = 'C_VIKTA'
WHERE 
     P.ProductId = #ProductId#

我认为最简单的方法是删除处理空值的 CONCAT,然后依赖于空值。所以你的单个 select 列将是

SELECT TOP 1 ISNULL(POCI.Value+' kg','N\A')

如果 POCI.Value 为 null 并且因此 return 'N\A'

,那么您将获得第一个参数的 null

这个WHERE POCI.Name = 'C_VIKTA'打破了左连接
所以将其向上移动到左连接或使它们全部成为常规连接

如果只有 return 一行,则删除顶部

+ 的行为不同于 concat

SELECT ISNULL(POCI.Value +' kg','N\A')
FROM ProductionOrder PO
JOIN Product P 
       ON P.ProductionOrderId = PO.ProductionOrderId
JOIN ProductionOrderConfiguration POC 
       ON POC.ProductionOrderConfigurationId  = PO.ProductionOrderConfigurationId 
JOIN ProductionOrderConfigurationItem POCI 
       ON POCI.ProductionOrderConfigurationId = POC.ProductionOrderConfigurationId           
WHERE POCI.Name = 'C_VIKTA' 
  AND P.ProductId = #ProductId# 

为什么需要 ProductionOrderConfiguration POC

SELECT ISNULL(POCI.Value +' kg','N\A')
    FROM ProductionOrder PO
    JOIN Product P 
           ON P.ProductionOrderId = PO.ProductionOrderId
    JOIN ProductionOrderConfigurationItem POCI 
           ON POCI.ProductionOrderConfigurationId = PO.ProductionOrderConfigurationId           
    WHERE POCI.Name = 'C_VIKTA' 
      AND P.ProductId = #ProductId#