我如何检查该值是否存在以及 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#
首先让我解释一下我目前使用的查询。
作为示例,此查询 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#