SQL Server查询,每行都有复杂的计算

时间:2009-07-23 17:29:59

标签: sql-server-2008 user-defined-functions

情况就是这样 表a cola1 cola2

表b
colb1 colb2 colb3 colb4 colb5

表c
colc1 colc2 colc3

对于cola2 = colb1和colb4 = colc12的每个值,获取colb2
对于cola2 = colb1和colb5 = colc3的每个值,fetch colb3

为每个可乐2计算(colb3-colb2)* size * factor1 计算每个cola2的SUM((colb3-colb2)* size * factor1) 计算每个cola2的AVG((colb3-colb2)* size * factor1)

(colb3-colb2)* size * factor1的值也需要存储在表中以进行其他计算。我尝试使用多语句表值用户定义函数。但是无法在同一个表中返回聚合值和单个值。如何在同一个连接查询中使用多个UDF?我还可以使用其他任何功能吗?

示例数据: 表a id1 prod1

表b
id1 datefrom dateto id1 id2
id2 datefrom dateto id3 id4

表c
id1日期价格
id2日期价格
id3日期价格
id4日期价格
表b(id1)匹配表c(id1)
表b(id2)匹配表c(id2)

我需要从表c中获取表b中两个ID的价格,这样我就可以减去这些值并找到结果的总和。 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为什么不能在简单的SQL语句中执行此操作?我在这里看不到任何太难的事情

select cola2, 
CASE WHEN cola2 = colb1 AND colb4 = colc12 THEN colb2 ELSE NULL END as Calculation1, 
CASE WHEN cola2 = colb1 AND colb5 = colc3 THEN colb3 ELSE NULL END AS Calculation2,
 (colb3 - colb2) * size * factor1 as Calculation3, <...>
INTO #intermediate
FROM tablea 
INNER JOIN tableb ON <...>
INNER JOIN tablec ON <...>

SELECT SUM(Calculation3) as SumCalculation3, AVG(Calculation3) as AvgCalculation3
FROM #intermediate

除非当然......你的问题还有其他部分你遗漏了。但一般来说,使用中间表是可以的,并且通常是处理这些复杂计算的最快方法。试图将它们全部集成到一个SQL SELECT中只是要求维护噩梦。