我有三张桌子:
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”值。
尚不清楚数据之间的关系。您似乎想先查看表 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