Sql 如何汇总多个列并将结果放入另一个现有列中?
这是我的桌子:Sql 如何汇总多个列并将结果放入另一个现有列中?,sql,sql-server,tsql,Sql,Sql Server,Tsql,这是我的桌子: CREATE TABLE [dbo].[InvoiceTable] ( [Id] INT IDENTITY (1, 1) NOT NULL, [CodeColumn] NVARCHAR (50) NOT NULL, [NameColumn] NVARCHAR (50) NOT NULL, [QTYColumn]
CREATE TABLE [dbo].[InvoiceTable] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[CodeColumn] NVARCHAR (50) NOT NULL,
[NameColumn] NVARCHAR (50) NOT NULL,
[QTYColumn] INT NULL,
[TotalQTYColumn] INT NULL,
[UnitCostColumn] INT NOT NULL,
[TotalCost] INT NULL,
[DiscountRateColumn] FLOAT (53) DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
我想要这样的东西:
SELECT
CodeColumn,
NameColumn
TotalQTYColumn = SUM(QTYColumn
TotalCost = SUM(UnitCostColumn)*SUM(QTYColumn))
blah
FROM InvoiceTable
这并不能解决我的问题:
select
blah
SUM(UnitCostColumn)*SUM(QTYColumn) AS TotalCost
SUM(QTYColumn) AS TotalQTYColumn,
blah
因为我想将ResAlt添加到表中的现有列中,而不是添加新内容
这对我不起作用:
SELECT
CodeColumn,
NameColumn,
(select TotalQTYColumn = SUM(QTYColumn))
UnitCostColumn,
DiscountRateColumn,
(select TotalCost = SUM(UnitCostColumn)*SUM(QTYColumn))
FROM InvoiceTable
GROUP BY CodeColumn, NameColumn, UnitCostColumn, DiscountRateColumn
当我想在datagridview上查看结果时,我不知道为什么它不在TotalCost列和TotalQTY列中显示结果。如果您想要整个列的总和,而不是特定的结果集,则必须将group by保留在外,并使用子查询,如
SELECT (select sum(QTYColumn) FROM InvoiceTable) as 'TotalQTYColumn',NameColumn, CodeColumn FROM InvoiceTable;
这将引导您走上正确的道路您可以在下面尝试
SELECT
CodeColumn,
NameColumn,
SUM(QTYColumn) as TotalQTYColumn
UnitCostColumn,
DiscountRateColumn,
SUM(UnitCostColumn)*SUM(QTYColumn) as TotalCost
FROM InvoiceTable
GROUP BY CodeColumn, NameColumn, UnitCostColumn, DiscountRateColumn
你做得不对。您尝试
更新语句中列的值。你应该这样做
update table InvoiceTable (TotalQTYColumn, TotalCost)
values(sum(QTYColumn), sum(UnitCostColumn) * sum(QTYColumn))
where Id = @id
并在定义@id
的循环中执行此操作。
然后,您可以只做一个SELECT
语句来检索值
但我认为你的桌子的逻辑有问题
为什么在同一个表中有两列包含总列数?您的表中有很多复制,其中有两列,而且每次在表中插入新值时,您都需要更新这些值
您应该从表中删除[TotalQTYColumn]
和[TotalCost]
,因为存在动态值和do
SELECT
CodeColumn,
NameColumn
SUM(UnitCostColumn)*SUM(QTYColumn) AS TotalCost
SUM(QTYColumn) AS TotalQTYColumn
FROM InvoiceTable
您想将求和的结果添加到现有列中,但在您的示例中,您试图更新SELECT
语句中列的值,这是错误的。我看到您的查询,认为算术不是您想要的。这是你想要的吗
SELECT CodeColumn, NameColumn
TotalQTYColumn = SUM(QTYColumn)
TotalCost = SUM(UnitCostColumn * QTYColumn)
FROM InvoiceTable
第二个问题不清楚。你能再看一遍吗?@thilinanakawita它只是SQL中的一个select语句:selectx fromXTable
。我只写了select X
部分。那些废话意味着什么。谢谢你的回答。它确实帮助了我。但我有一些问题。首先我想回答,我有TOTALQTY和QTYColumn,因为我有某种发票程序。当用户插入具有新数量的相同商品时,新数量将转到QTY列,并以TotalQTY列计算总数。这就是我使用GROUPBY子句的原因…我的第一个问题是如何在循环中做到这一点?第二个问题:当我使用sum(blah)作为总数量时,总成本列不是实际列。。。因此,我无法在另一个存储过程中回忆起该列。例如,我不能在另一个存储过程中说设置总数量=总数量+1
。这是我的问题,所以我选择在实际列中包含totalQTY。我理解QTYColumn
的需要,但我不理解在您的记录中包含totalQTY
的需要。。。因为它是一个值,将在CodeColumn、NameColumn、UnitCostColumn和DiscountRateColumn
相同的每一行中复制,所以每次执行插入/更新/删除操作时,您都需要更新整个表,因为您的所有行都是相关的,否则您的表不会更新。。。如果您想在另一个存储过程中增加值,只需执行设置TotalQTY=SUM(QTYColumn)+1
是的,我知道了,您说得很对。但我的问题仍然存在,以这种方式。当我把sum(blah)称为TotalQTYColumn
时,我无法在另一个存储过程中回忆起TotalQTYColumn
。系统在其下方加一条红线,表示未检测到此列或此列不存在。我能用这个做什么?你真的增加了我的知识,谢谢你。谢谢您的时间。如果TotalQTYColumn
在第一个存储过程的返回语句中的SELECT
中,我不理解它为什么不存在,可能是因为它不是表中的列,它不理解它是动态生成的列,但它会编译,您仍然可以正常运行而不出现错误是的。多谢各位