我的问题描述:
这是我在SQL SERVER中的表:(以前输入的是包含的数据。)
ID CodeColumn NameColumn QNT UnitCost Description
1 121 lute 3 100000 blah
3 122 Leather 10 50000 blah
我有一个C#程序,其中包含所有这些列的可重复文本框。
这是我的addgoods存储过程:
CREATE procedure AddGoods
@QCode nvarchar(50),
@QName nvarchar(50),
@QQNT int,
@QUnitCost int,
@QDR int,
@QDesc nvarchar(250)
as
Insert Into GoodsTable1(CodeColumn,NameColumn,QTYColumn,UnitCostColumn,DiscountRateColumn,DescriptionColumn) values (@QCode,@QName,@QQNT,@QUnitCost,@QDR,@QDesc)
return
这是我想要的报告存储过程:(对我大吼)
SELECT ROW_NUMBER() Over (ORDER BY namecolumn) AS RowNumberColumn,
CodeColumn,
NameColumn,
SUM(QNTColumn) AS QNT,
UnitCostColumn,
DiscountRateColumn,
SUM(UnitCostColumn) AS Total,
DescriptionColumn
FROM GoodsTable1
GROUP BY NameColumn
当我从用户那里得到输入时,每次输入相同的代码或名称,我都希望quantity column
的值是输入中商品可重复值的总和。
另外,我希望将UnitCost Column
的值求和并显示为TotalColumn
。
例如: (正如我所说的,这些数据是先前输入的)
1 121 lute 3 100000 blah
3 122 Leather 10 50000 blah
当我从用户那里获得新输入时,例如:
121 lute 5 100000 information
我希望能够从我的数据库中进行报告:
121 lute 8 100000 *(blah gets deleted)* information
我在查询中尝试了此操作,以避免出现错误:
select
NameColumn,
SUM(QTYColumn),
SUM(UnitCostColumn)
FROM GoodsTable1
GROUP BY NameColumn
它可以工作,但我也需要其他列。
答案 0 :(得分:0)
尝试像这样更改查询
SELECT ROW_NUMBER() Over (ORDER BY namecolumn) AS RowNumberColumn,
CodeColumn,
NameColumn,
SUM(QTYColumn) AS QTY,
UnitCostColumn,
DiscountRateColumn,
SUM(UnitCostColumn) AS Total,
DescriptionColumn
FROM GoodsTable1
GROUP BY CodeColumn, NameColumn, UnitCostColumn, DiscountRateColumn, DescriptionColumn
您可以在SELECT
和GROUP BY
子句中添加所需的其他字段,但是请确保具有唯一的值,因为会得到错误的结果。
答案 1 :(得分:0)
您的问题尚不清楚,其中包含一些差异。让我们尝试清理它:
您的列在示例数据中称为QNT,在查询中称为QTY。我怀疑这只是一个错误。其他列也一样。假设您的表格看起来像下面的示例:
DECLARE @table TABLE
(
ID int identity,
CodeColumn varchar(8),
NameColumn nvarchar(20),
QtyColumn int,
UnitCostColumn decimal(15,2),
DescriptionColumn nvarchar(MAX),
DiscountRateColumn decimal(15,2) DEFAULT (0.0)
)
INSERT @table(CodeColumn, NameColumn, QtyColumn, UnitCostColumn, DescriptionColumn) VALUES
(121, 'lute', 3, 100000, 'blah'),
(122, 'Leather', 10, 50000, 'blah'),
(121, 'lute', 5, 100000, 'blah')
然后,您可以按以下方式计算运行总计:
SELECT *,
SUM(QtyColumn) OVER (PARTITION BY CodeColumn ORDER BY ID) RunningQty,
SUM(UnitCostColumn) OVER (PARTITION BY CodeColumn ORDER BY ID) RunningCost
FROM @table
结果:
ID CodeColumn NameColumn QtyColumn UnitCostColumn DescriptionColumn DiscountRateColumn RunningQty RunningCost
---- ---------- ------------ ----------- --------------- ------------------ -------------------- ----------- ------------
1 121 lute 3 100000.00 blah 0.00 3 100000.00
3 121 lute 5 100000.00 blah 0.00 8 200000.00
2 122 Leather 10 50000.00 blah 0.00 10 50000.00
我也希望您正在尝试仅保留每个组中的最后一条记录。上面的查询可以改写为:
SELECT */*select all columns you need*/ FROM (
SELECT *,
SUM(QtyColumn) OVER (PARTITION BY CodeColumn ORDER BY ID) RunningQty,
SUM(UnitCostColumn) OVER (PARTITION BY CodeColumn ORDER BY ID) RunningCost,
ROW_NUMBER() OVER (PARTITION BY CodeColumn ORDER BY ID DESC) LastRank
FROM @table
) T WHERE T.LastRank=1
结果:
ID CodeColumn NameColumn QtyColumn UnitCostColumn DescriptionColumn DiscountRateColumn RunningQty RunningCost LastRank
--- ---------- ----------- ----------- --------------- ------------------ ------------------- ----------- ------------ ---------
3 121 lute 5 100000.00 blah 0.00 8 200000.00 1
2 122 Leather 10 50000.00 blah 0.00 10 50000.00 1
要提供更紧凑,更有效的解决方案,需要更多信息。