2015-09-04 113 views
0

我目前正在計算一個更大的一組數據與一些聯接和最終的結果是跨兩個表的計算。我的當前腳本如下所示:複雜的計算 - SQL Server

USE db1 
Go 

SELECT 
    customer, tb1.custid 
FROM 
    [dbo].[tb1] 
LEFT OUTER JOIN 
    [dbo].[tb2] ON tb1.custid = tb2.custid 
LEFT OUTER JOIN 
    [dbo].[tb3] ON tb2.custnumber = tb3.custnumber 
LEFT OUTER JOIN 
    [dbo].[tb4] ON tb2.custid = tb4.custid 
WHERE 
    tb1.custclass = 'non-person' 
    AND tb4.zip IN ('11111', '11112') 
GO 

正如您所看到的,它不是最乾淨的,但它用於收集初始信息。連接數量的原因是由於我沒有創建一個令人難以置信的奇怪表格結構,而且我需要的數字數據只存儲在tb3中。

我現在要做的是計算tb3中所有設置爲數字字段的3個字段的總和,並對第4個字段(也是數字)進行AND/OR比較。我知道我可以將它們彙總在一起,但我希望在三件事情上進行一些輸入:

  1. 何處將SUM計算置於查詢中?
  2. 在哪裏放置以及如何將SUM總數與第4場進行比較?
  3. 是否有可能將兩個值中較高的值返回到初始SELECT中的TOTAL列?

在此先感謝您。

+0

一次做一件事。從一個簡單的總和開始。你在哪裏可以放置哪些選項? –

+0

將數據分散在多個表中並不罕見。但在加入多個表格時請小心謹慎:如果您在t4中有三條匹配的記錄,則可以將t3數據重複三次。另外:你確定你需要外部連接嗎?最後一個甚至不起作用,因爲您比較WHERE子句中的t4值,而不考慮在外連接記錄的情況下該值爲空。如果您確實需要外連接,則可能需要將該條件移至ON子句。 –

回答

1

在哪裏放置SUM計算在查詢中?

如果你想它的輸出,你可能只想把它添加到SELECT

SELECT 
    customer, tb1.custid 
    (tb3.col1 + tb3.col2 + tb3.col3) as Sum 
FROM 
    ... 

放在什麼地方和如何做的總和對第4場的比較呢?

你可能想用CASE語句來做到這一點,這也回答你最後一個問題

是否有可能返回兩個值中的較高者共列在最初的選擇?

SELECT 
    customer, tb1.custid 
    CASE WHEN (tb3.col1 + tb3.col2 + tb3.col3) > tb3.col4 
     THEN (tb3.col1 + tb3.col2 + tb3.col3) 
     ELSE tb3.col4 
    END as Total 
FROM 
    ... 
0

你應該能夠計算總和爲嵌套查詢:

SELECT (field1 + field2 + field3) AS fields_sum FROM tb3 (...) 

然後在你的主查詢,你可以這樣做:

SELECT customer, tb1.custid, (CASE WHEN fields_sum > fourth_field THEN fields_sum ELSE fourth_field END) AS TOTAL (...) 
+0

從「來自tb3的3個字段的總和」這個問題 - 您的第一部分將整個表中的一個字段相加。 – Jamiec

+1

已編輯;那裏我沒有給予足夠的重視。謝謝。無論如何,你的解決方案可能更優雅一些。 – sschimmel