Sql 表I和表x27中的聚合函数;我在创造

Sql 表I和表x27中的聚合函数;我在创造,sql,sql-server,Sql,Sql Server,我有一个数据集,其中我有一个ItemID,然后是按以下价格出售的数量: ItemID | Quantity | Price ABC 10 14.50 ABC 4 14.25 DEF 32 22.41 ABC 24 14.10 GHI 8 8.50 GHI 12 8.60 DEF

我有一个数据集,其中我有一个ItemID,然后是按以下价格出售的数量:

ItemID  |  Quantity  |  Price
ABC        10           14.50
ABC        4            14.25
DEF        32           22.41
ABC        24           14.10
GHI        8            8.50
GHI        12           8.60
DEF        2            22.30
;WITH CTE_Total AS
(
    SELECT ItemID, SUM(Quantity) as TotalQ
    FROM YourTable
    GROUP BY ItemID
)
SELECT t.*, c.TotalQ
FROM YourTable t
LEFT JOIN CTE_Total c on t.ItemID = c.ItemID
每个条目都有ItemID和Price的唯一组合。我想添加第四列,其中包含该ItemID的总销售量。所以上表是这样的:

ItemID  |  Quantity  |  Price  |  TotalQ
ABC        10           14.50     38
ABC        4            14.25     38
DEF        32           22.41     34
ABC        24           14.10     38
GHI        8            8.50      20
GHI        12           8.60      20
DEF        2            22.30     34
如果不对聚合函数执行聚合函数,我似乎无法做到这一点,这显然会产生错误。我将如何着手实现这一点

我正在使用SQL Server 2008。

请尝试:

SELECT 
    *, 
    SUM(Quantity) OVER(PARTITION BY ItemID) TotalQ
FROM 
    YourTable
请尝试:

SELECT 
    *, 
    SUM(Quantity) OVER(PARTITION BY ItemID) TotalQ
FROM 
    YourTable
试试这个代码

select a.ItemID,a.Quantity,a.Price,x.Total form table_name a
left outer join 
(select sum(Quantity) Total, ItemID from table_name group by ItemID)x
on x.ItemID = a.ItemID
试试这个代码

select a.ItemID,a.Quantity,a.Price,x.Total form table_name a
left outer join 
(select sum(Quantity) Total, ItemID from table_name group by ItemID)x
on x.ItemID = a.ItemID

如果您在查询中需要此项,您可以编写如下内容:

ItemID  |  Quantity  |  Price
ABC        10           14.50
ABC        4            14.25
DEF        32           22.41
ABC        24           14.10
GHI        8            8.50
GHI        12           8.60
DEF        2            22.30
;WITH CTE_Total AS
(
    SELECT ItemID, SUM(Quantity) as TotalQ
    FROM YourTable
    GROUP BY ItemID
)
SELECT t.*, c.TotalQ
FROM YourTable t
LEFT JOIN CTE_Total c on t.ItemID = c.ItemID

但是,如果要在表中自动计算列,首先需要创建执行计算的函数:

CREATE FUNCTION dbo.fn_YourTableTotalQ (@ItemID VARCHAR(3))
RETURNS Int
AS
BEGIN
   DECLARE @toRet INT

   SELECT @toRet = COALESCE(SUM(Quantity),0)
   FROM YourTable WHERE ItemID = @ItemID

   RETURN @toRet
END
。。。然后添加使用此函数计算的新列:

ALTER TABLE YourTable
ADD TotalQ AS dbo.fn_YourTableTotalQ(ItemID)

如果您在查询中需要这个,您可以这样写:

ItemID  |  Quantity  |  Price
ABC        10           14.50
ABC        4            14.25
DEF        32           22.41
ABC        24           14.10
GHI        8            8.50
GHI        12           8.60
DEF        2            22.30
;WITH CTE_Total AS
(
    SELECT ItemID, SUM(Quantity) as TotalQ
    FROM YourTable
    GROUP BY ItemID
)
SELECT t.*, c.TotalQ
FROM YourTable t
LEFT JOIN CTE_Total c on t.ItemID = c.ItemID

但是,如果要在表中自动计算列,首先需要创建执行计算的函数:

CREATE FUNCTION dbo.fn_YourTableTotalQ (@ItemID VARCHAR(3))
RETURNS Int
AS
BEGIN
   DECLARE @toRet INT

   SELECT @toRet = COALESCE(SUM(Quantity),0)
   FROM YourTable WHERE ItemID = @ItemID

   RETURN @toRet
END
。。。然后添加使用此函数计算的新列:

ALTER TABLE YourTable
ADD TotalQ AS dbo.fn_YourTableTotalQ(ItemID)

你是如何知道TotalQ的?你可以写一个函数来计算TotalQ,听起来这正是我想要的。我对SQL非常陌生,所以我真的不知道如何编写这样的函数。你怎么知道TotalQ?你可以写一个函数来计算TotalQ,听起来这正是我想要的。我对SQL非常陌生,所以我真的不知道如何编写这样的函数。得到错误:Msg 8120,级别16,状态1,第24行列“server.Quantity”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@weskpga-您可能需要
SUM(SUM([Quantity])OVER(按[ItemID]分区)作为TotalQ
如果您在另一个查询的上下文中使用它,该查询已按
ItemID、Price进行分组。最好向我们显示原始查询,而不仅仅是结果。得到错误:Msg 8120,级别16,状态1,第24行列“server.Quantity”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@weskpga-您可能需要
SUM(SUM([Quantity]),而不是(PARTITION BY)[ItemID])作为TotalQ
如果您在已按
ItemID、Price
分组的另一个查询的上下文中使用它。最好向我们显示原始查询,而不仅仅是结果。