You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断值是否存在并根据查询结果返回不同值?

解决方案:根据查询结果存在性返回不同值

我明白你的需求了——你现在有一个查询会返回类似 357 kg 的字符串,但需要判断这个结果是否存在(也就是原查询有没有匹配到记录),然后根据判断返回对应的结果。下面给你几个实用的SQL实现方案:

方案1:使用CASE + EXISTS(直观易懂)

这个方案先检查是否存在符合条件的记录,再决定返回原查询结果还是默认值:

SELECT 
    CASE 
        -- 先判断是否存在匹配的记录
        WHEN EXISTS (
            SELECT 1 
            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# -- 替换为你的实际参数
        ) THEN (
            -- 存在则执行原查询返回拼接后的重量值
            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#
        )
        -- 不存在则返回你指定的默认值,比如'N/A'或者空字符串
        ELSE 'N/A' 
    END AS WeightResult

方案2:使用CTE + COALESCE(避免重复查询,性能更优)

如果担心重复执行两次原查询影响性能,可以用公共表表达式(CTE)先获取结果,再处理空值场景:

-- 先通过CTE获取可能的重量结果
WITH WeightCTE AS (
    SELECT TOP 1 CONCAT(POCI.Value,' kg') AS WeightValue
    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#
)
-- 处理两种情况:CTE有结果则返回,无结果则返回默认值
SELECT COALESCE(WeightValue, 'N/A') AS WeightResult
FROM WeightCTE
UNION ALL
SELECT 'N/A' AS WeightResult
WHERE NOT EXISTS (SELECT 1 FROM WeightCTE)

小提示

  • 你可以把 'N/A' 替换成任何你需要的默认值,比如空字符串 '' 或者 '无数据'。
  • 如果你的原查询中 LEFT JOIN 其实应该是 INNER JOIN(比如只有关联到Product的ProductionOrder才需要统计),可以调整JOIN类型让结果更准确。

内容的提问来源于stack exchange,提问作者Mikael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:29:53