2011-03-30 107 views
2

計算列求和我有兩個表(ItemsItem_Types),我想這樣做在計算列在Item_Types表作爲公式如下:SQL服務器 - 從不同的表

SELECT SUM(Items.Qty_In_Stock) FROM Items WHERE Items.Item_Type = Item_Types.ID 

但管理工作室並不喜歡它。

我該怎麼做?或者我剛剛得到了我的語法錯誤?我不擅長使用SQL。

謝謝

編輯:我想我需要更具體。

一個ItemType可以有很多Items

每個Item有一個Qty_In_Stock字段。

我想所有Qty_In_Stock領域的總和,其中Items.Item_Type = Item_Types.ID - 不僅僅是整列的總和。

乾杯

+0

我認爲這是你想要做的。閱讀下面的答案,看看我的整個假設是否正確。在任何人降低其他答案之前,請注意,OP的陳述要求發生了變化,他們只是給出了適合原始要求的答案。 – dugas 2011-03-30 23:03:39

回答

1

假設你想顯示爲每個項目類型的可用數量: 我建議創建一個視圖,顯示以下信息:
您需要「GROUP BY」項目類型。

CREATE VIEW Item_Types_Qty_In_Stock 
AS 

SELECT it.ID, SUM(i.Qty_In_Stock) AS QtyInStock FROM Items i 
INNER JOIN Item_Types it ON i.Item_Type = it.ID 
GROUP BY it.ID 
GO 

一旦創建視圖,可以查詢它,就好像它是一個表:

SELECT * FROM Item_Types_Qty_In_Stock 
+0

忘了添加,上面的代碼中缺少'AS'語句。 – 2011-03-31 16:40:49

1

沒有加入Item_types表。加入並且你應該沒問題。

SELECT SUM(Items.Qty_In_Stock) from Items INNER JOIN Item_Types ON Items.Item_Type = Item_Types.ID GROUP BY Items.Item_Type 
+0

是的,我意識到了聯接的事情,但是當作爲計算列輸入時,這仍然不起作用 - 是否允許在計算列中進行聯接? – 2011-03-30 22:43:24

+0

是的,他們是。您還需要有一組來完成查詢。 – Rasika 2011-03-30 23:16:27

+0

與John的回答一樣,當我嘗試在Management Studio中輸入計算列規格時,仍然收到「驗證列'Stock_Qty'公式的錯誤' – 2011-03-31 15:36:12

1

下面將返回至少一個Item_type記錄的所有項目的Qty_In_Stock的總和。

SELECT 
    SUM(i.Qty_In_Stock) 
FROM Items i 
INNER JOIN Item_types it on i.Item_Type = it.ID 

您可能需要使用一個左連接,如果每個項目不具有至少一個ITEM_TYPE病案舉例:

SELECT 
    SUM(i.Qty_In_Stock) 
FROM Items i 
LEFT JOIN Item_types it on i.Item_Type = it.ID 

編輯

也許這就是你想要的。這將返回項目(qty_in_stock)的個體和每個ITEM_TYPE ID

SELECT 
    it.Id, 
    SUM(i.Qty_In_Stock) 
FROM Items i 
INNER JOIN Item_types it on i.Item_Type = it.ID 
GROUP BY it.Id 
+0

我仍然收到」錯誤驗證列'Stock_Qty'的公式「」當我嘗試在管理工作室中輸入計算列規範時... – 2011-03-31 15:35:23

0

計算列是從可以在同一表中使用的其他列表達式計算。該表達式可以是一個非計算列名稱,常量,函數,以及由一個或多個運算符連接的這些的任意組合。 該表達式不能是子查詢