我正在用SQL编写一个存储过程,作为其中的一部分,我需要 Select 三个可能值(Demand、Average和Forecast)中的最大值.我有查找每个值的查询,但我想知道以下哪个选项是最佳实践:
选项1:将所有三个查询 Select 到临时表中,然后使用CASEWHEN语句为每行 Select 三个查询中的最大值.
选项2:使用联合将我的三个查询合并为一个主要的SELECT语句.
我甚至不知道选项2是否可行,所以如果不是,我将只使用临时表,但我无法想象这是编写我想要的内容的最有效方式.因为我在一个存储过程中使用它,所以我很难 Select 一个测试material 来测试代码,所以我很感激关于这方面的最佳编写实践的任何建议,如果在我测试过程时它不起作用,我可以在这里用更具体的代码提出另一个问题.
选项1:(我知道这段代码可以工作,但它似乎太复杂了,不是最有效的选项)
SELECT Plant, Material, Dmd
INTO #T1
FROM Table1
SELECT Plant, Material, Avg
FROM #T2
FROM Table2
SELECT Plant, Material, Fcst
INTO #T3
FROM Table3
SELECT a.Plant,
a.Material,
CASE WHEN Dmd > Avg AND Dmd > Fcst THEN Dmd ELSE
CASE WHEN Avg > Fcst THEN Avg ELSE Fcst END END as 'Output'
FROM #T1 a INNER JOIN
#T2 b on a.Plant = b.Plant AND a.Material = b.Material INNER JOIN
#T3 c on a.Plant = c.Plant AND a.Material = c.Material
选项2:(在我的脑海中,这逻辑上应该工作,但我以前没有写过,所以我不知道它有多实用)
SELECT a.Plant,
a.Material,
CASE WHEN Dmd > Avg AND Dmd > Fcst THEN Dmd ELSE
CASE WHEN Avg > Fcst THEN Avg ELSE Fcst END END as 'Output'
FROM
(SELECT Plant, Material, Dmd
FROM Table1) a
UNION
(SELECT Plant, Material, Avg
FROM Table2) b
UNION
(SELECT Plant, Material, Fcst
FROM Table3) c
如果有帮助的话,我的输入表中的条目应该都是相同的工厂和material 的不同订购数量,所以我知道每个查询中的唯一条目将是相同的工厂和material ,只要我的表1、表2和表3都与输入表连接.
编辑: 表1、2和表3中可能列出的内容以及所需输出的示例: (对不起,如果格式不对,我正在try )
表1(设备、material 、DMD)
1000 x 3
表2(工厂、material 、平均值)
1000 x 6
表3(工厂、material 、FCST)
1000 x 4.5
期望yields (设备、material 、yields )
1000 x 6