0

我有一个数据集,其中有一个 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

每个条目都有唯一的 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。

4

3 回答 3

4

请试试:

SELECT 
    *, 
    SUM(Quantity) OVER(PARTITION BY ItemID) TotalQ
FROM 
    YourTable
于 2013-05-16T12:37:13.230 回答
0

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

;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

SQLFiddle 演示

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

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)

SQLFiddle 演示

于 2013-05-16T12:53:40.467 回答
0

试试这个代码

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
于 2013-05-16T12:40:48.607 回答