有一个案例返回的是 0.85 的值,而不是实际的行值

问题描述 投票:0回答:1

我有三张桌子:

STEP_Atts
工具代码_公司1
工具代码_公司2

我正在尝试从与 Step_Atts 匹配的两个表中提取“效率”字段。当我这样做时,它只为我提供一个响应 (0.85),而实际上,效率范围从 0.7 到 0.9,具体取决于工具代码名称。

SELECT
    Step_Atts.UDF_ToolCode,
    CASE
        WHEN (SELECT ToolCode FROM Company1.dbo.JT_ToolCode WHERE ToolCode = Step_Atts.UDF_ToolCode) IS NULL
            THEN (SELECT TOP (1) UDF_EFFICIENCY FROM Company1.dbo.JT_ToolCode WHERE ToolCode = Step_Atts.UDF_TOOLCODE)
        ELSE
            (SELECT TOP (1) UDF_EFFICIENCY FROM Company2.dbo.JT_ToolCode)
        END AS "Efficiency"
FROM Company1.dbo.[Step_Atts], Company1.dbo.JT_ToolCode, Company2.dbo.JT_ToolCode
WHERE
    Step_Atts.UDF_ToolCode = JT_ToolCode

我尝试在Where中执行两个exists,但是执行此操作时系统超时。

我不确定我做了什么错误的操作,让 Efficiency 只为所有行返回 1 个值,而不是返回与 Company1 或 Company2 中相应行相对应的“Efficiency”值。

sql-server case
1个回答
-1
投票

尚不清楚数据之间的关系。您似乎想先查看表 A,然后查看表 B(如果未在表 A 中找到)。我相信完全加入可能会起作用。您需要提供一些示例数据来看看是否有更好的方法。

with Tools as (
    select
        coalesce(t1.ToolCode, t2.ToolCode) as ToolCode,
        coalesce(t1.UDF_EFFICIENCY, t2.UDF_EFFICIENCY) as UDF_EFFICIENCY
    from Company1.dbo.JT_ToolCode t1
         full outer join
         Company2.dbo.JT_ToolCode t2
             on t1.ToolCode = t2.ToolCode
)
select sa.UDF_ToolCode, t.UDF_EFFICIENCY as Efficiency
from Company1.dbo.Step_Atts sa
    inner join Tools t on sa.UDF_ToolCode = t.ToolCode
© www.soinside.com 2019 - 2024. All rights reserved.