这是我的桌子:
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列中显示结果。
答案 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