如何汇总多列并将结果放入另一个现有列?

时间:2018-11-12 09:41:11

标签: 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]          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

因为我想将结果添加到表中的现有列,而不是新内容...

这对我不起作用:

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列中显示结果。

4 个答案:

答案 0 :(得分:1)

如果您希望整个列的总和而不是特定的结果集,则请按组别离开该组,并使用诸如

的子查询
SELECT (select sum(QTYColumn) FROM InvoiceTable) as 'TotalQTYColumn',NameColumn, CodeColumn FROM InvoiceTable;

应该引导您走上正确的道路

答案 1 :(得分:0)

您可以在下面尝试

SELECT
CodeColumn,
NameColumn,
SUM(QTYColumn) as TotalQTYColumn
UnitCostColumn,
DiscountRateColumn,
SUM(UnitCostColumn)*SUM(QTYColumn) as TotalCost
FROM InvoiceTable
GROUP BY CodeColumn, NameColumn, UnitCostColumn, DiscountRateColumn

答案 2 :(得分:0)

您没有做正确的事。您尝试UPDATE语句中的列值SELECT。你应该做

update table InvoiceTable (TotalQTYColumn, TotalCost)
values(sum(QTYColumn), sum(UnitCostColumn) * sum(QTYColumn))
where Id = @id

并在定义@id的循环中执行此操作。 然后,您只需执行SELECT语句即可获取该值。

但是我认为您的表逻辑存在问题。

为什么您有2列包含同一表中的列总数?您的表内有很多复制内容,其中有这两列,并且每次在表中插入新值时都需要更新这些值...

您应该从表中删除[TotalQTYColumn][TotalCost],因为存在动态值并且可以这样做

    SELECT 
    CodeColumn,
    NameColumn
    SUM(UnitCostColumn)*SUM(QTYColumn) AS TotalCost
    SUM(QTYColumn) AS TotalQTYColumn
    FROM InvoiceTable

您想将SUM的结果添加到现有列中,但是在您的情况下,您试图UPDATE语句中的列值SELECT,这是错误的。

答案 3 :(得分:0)

我正在查看您的查询,并认为算术不是您想要的。这是您想要的吗?

SELECT CodeColumn, NameColumn
       TotalQTYColumn = SUM(QTYColumn)  
       TotalCost = SUM(UnitCostColumn * QTYColumn)
FROM InvoiceTable