1

这是这种情况。
表一个
可乐1可乐2

表 b
colb1 colb2 colb3 colb4 colb5

表 c
colc1 colc2 colc3

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

为每个 cola2 计算 (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

table c
id1 date price
id2 date price
id3 date price
id4 date price
table b(id1) matches table c(id1)
table b(id2) matches表 c(id2)

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

4

1 回答 1

1

为什么不能在简单的 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 中只是要求进行维护的噩梦。

于 2009-07-23T18:14:35.733 回答