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
中,我不理解它为什么不存在,可能是因为它不是表中的列,它不理解它是动态生成的列,但它会编译,您仍然可以正常运行而不出现错误是的。多谢各位