Sql 表I和表x27中的聚合函数;我在创造
我有一个数据集,其中我有一个ItemID,然后是按以下价格出售的数量: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 | 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
分组的另一个查询的上下文中使用它。最好向我们显示原始查询,而不仅仅是结果。