2009-07-23 78 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