2009-07-23 79 views
0

这就是这种情况。

cola1 cola2SQL Server查询每行都有复杂的计算

表B
colb1 colb2 colb3 colb4 colb5

表C
colc1 colc2 colc3

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

为每个可乐2计算(colb3- colb2)*大小* factor1。
计算SUM((colb3- colb2)* *尺寸因子1),用于每cola2
计算AVG((colb3- colb2)* *尺寸因子1),用于每cola2

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

样本数据: 表
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的价格,因此我可以减去这些值并找到结果的总和。 感谢任何帮助。

+0

您错过了一些重要信息。对于初学者,表c是如何与其他表连接的? – Tomalak 2009-07-23 17:47:04

+0

表b(colb4,colb5)与表c有一个外键关系(colc2,colc3) – Techspirit 2009-07-23 18:06:43

回答

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中只是要求维护一个噩梦。

+0

谢谢。我发现你的想法非常有用。 如果我在colb4 = colc12,取colb3和colb5 = colc2,取colb3时连接表b和表c,我将如何分配条件子句? – Techspirit 2009-07-23 18:53:23