2010-12-14 79 views
2

我很難找出任何方式將兩個SQL查詢合併爲一個表示更好的想法的單個表單。如何組合多個SQL查詢?

例如,假設我有查詢A和查詢B.查詢A返回工作的總小時數。查詢B返回可供工作人員使用的總小時數。這些查詢中的每一個查詢都會返回一個包含單個行的列。

但是我真正想要的,實質上是查詢A而不是查詢B.我想知道工作容量的百分比。

我知道如何獨立編寫查詢A和B,但是當我試圖弄清楚如何使用這些預寫查詢來創建一個將它們一起使用的新SQL查詢時,我就會遇到問題。我知道,在更高級別上,就像在報告中說的那樣,我可以調用這兩個查詢然後將它們分開,但我寧願將它們全部包含到單個SQL查詢中。

我在找的是關於如何將這些查詢結合使用SQL的一般想法。

謝謝!

+0

與其嘗試抽象地回答這個問題,不如發表你的疑問,讓我們來處理這個特殊情況。 – 2010-12-14 16:40:03

回答

6

約束JOIN,1行的笛卡爾乘積row

SELECT worked/available AS PercentageCapacity 
FROM (SELECT worked FROM A), 
    (SELECT available FROM B) 
+0

我基本結束了使用這個。我發現非常重要的是將列和行排成一行。在這一點上,我感到困惑。 – Jazzepi 2010-12-22 02:01:43

1

答案取決於數據來自何處。

如果它是從一個單獨的表上,但也可能是那麼容易,因爲:

select totalHours, availableHours, (totalHours - availableHours) as difference 
from hoursTable 

但是,如果將數據從單獨的表來了,你需要添加一些標識列,以便可將行聯合起來提供一些有用的數據視圖。

你可能想發佈你的查詢的例子,所以我們更好地知道如何回答你的問題。

+0

我重複了這個問題,提供了更多關於我實際使用的數據庫的細節和細節。 http://stackoverflow.com/questions/4474364/combining-queries-to-calculate-values – Jazzepi 2010-12-17 20:26:22

1

您可以查詢查詢:

SELECT 
    a.ID 
    a.HoursWorked/b.HoursAvailable AS UsedWork 
FROM 
    (SELECT ID, HoursWorked FROM Somewhere) a 
INNER JOIN 
    (SELECT ID, HoursAvailable FROM SomewhereElse) b 
ON 
    a.ID = b.ID 
+0

當然要小心這是這些是整數,否則你將有不好的數學。 – HLGEM 2010-12-14 18:22:51

1

你可以聲明變量來存儲每個查詢的結果並返回的區別:1

DECLARE @first INT 
DECLARE @second INT 

SET @first = SELECT val FROM Table... 
SET @second = SELECT val FROM Table... 

SELECT @first - @second