2011-03-30 66 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

计算列是从可以在同一表中使用的其他列表达式计算。该表达式可以是一个非计算列名称,常量,函数,以及由一个或多个运算符连接的这些的任意组合。 该表达式不能是子查询