Sql server 子查询返回了多个值。当子查询后跟=、!=、时,不允许这样做,或者当子查询用作表达式时

Sql server 子查询返回了多个值。当子查询后跟=、!=、时,不允许这样做,或者当子查询用作表达式时,sql-server,vb.net,Sql Server,Vb.net,我需要更新tableA的total字段 使用查询的结果 按日期从销售组中选择SUMamt,RNAME 我试过这样做 更新表格A集合总计=按日期、RNAME从销售组中选择sumbillamt 它显示了错误 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。查询: select sum(billamt) from SALES group by DATE,RNAME 返回按日期分组的billamt和RNAME的总和 如果有多个日期或RNAME唯一值,则返回的值是一个表而不是一个字段

我需要更新tableA的total字段 使用查询的结果 按日期从销售组中选择SUMamt,RNAME

我试过这样做

更新表格A集合总计=按日期、RNAME从销售组中选择sumbillamt

它显示了错误 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。

查询:

select sum(billamt) from SALES group by DATE,RNAME
返回按日期分组的billamt和RNAME的总和

如果有多个日期或RNAME唯一值,则返回的值是一个表而不是一个字段

您可以单独运行此查询并检查返回值

如错误所述,一个字段不能设置多个值。

查询:

select sum(billamt) from SALES group by DATE,RNAME
返回按日期分组的billamt和RNAME的总和

如果有多个日期或RNAME唯一值,则返回的值是一个表而不是一个字段

您可以单独运行此查询并检查返回值

如错误所述,一个字段不能设置多个值。

请尝试以下操作:

update A
set Total = B.Total
From tableA  A
Inner Join (select DATE,RNAME,sum(billamt) Total from SALES group by DATE,RNAME) B
On A.Date = B.Date and A.RName = B.RNAme
尝试以下方法:

update A
set Total = B.Total
From tableA  A
Inner Join (select DATE,RNAME,sum(billamt) Total from SALES group by DATE,RNAME) B
On A.Date = B.Date and A.RName = B.RNAme

由于上述问题中的表结构不清楚,我假设tableA有Total、Date和RName列

update tableA set tableA.total = 
a.total from (select SUM(amt) as total, date, rname from SALES group by DATE,RNAME) as a
where a.date = tableA.date and tableA.rname = a.rname
-在sales table use中Rname可以为null的情况下进行编辑

update tableA set tableA.total = a.total
from (select SUM(amt) as total, date, rname from #t1 group by DATE,RNAME) as a
where a.date = tableA.date and tableA.rname = a.rname
OR (a.date = tableA.date AND tableA.rname IS NULL and a.rname IS NULL)
-进一步阐述

CREATE TABLE #t1 (amt decimal(18,2), [date] date, rname varchar(50))
INSERT INTO #t1
SELECT 1.9, GETDATE() - 1, NULL
UNION ALL
SELECT 1.9, GETDATE() - 1, NULL
UNION ALL
SELECT 8.9, GETDATE() - 1, NULL
UNION ALL
SELECT 8.9, GETDATE(), NULL
UNION ALL
SELECT 2.9, GETDATE() - 1, 'N1'
UNION ALL
SELECT 2.8, GETDATE() - 1, 'N1'

CREATE TABLE #t2 (total decimal(18,2), [date] date, rname varchar(50))
INSERT INTO #t2
SELECT 0, GETDATE() - 1, NULL
UNION ALL
SELECT 0, GETDATE() - 1, 'N1'

update #t2 set #t2.total = a.total
from (select SUM(amt) as total, date, rname from #t1 group by DATE,RNAME) as a
where a.date = #t2.date and #t2.rname = a.rname
OR (a.date = #t2.date AND #t2.rname IS NULL and a.rname IS NULL)


SELECT * FROM #t2 

我希望它现在清楚了

因为在上面的问题中表格结构不清楚,我假设表格A有Total、Date和RName列

update tableA set tableA.total = 
a.total from (select SUM(amt) as total, date, rname from SALES group by DATE,RNAME) as a
where a.date = tableA.date and tableA.rname = a.rname
-在sales table use中Rname可以为null的情况下进行编辑

update tableA set tableA.total = a.total
from (select SUM(amt) as total, date, rname from #t1 group by DATE,RNAME) as a
where a.date = tableA.date and tableA.rname = a.rname
OR (a.date = tableA.date AND tableA.rname IS NULL and a.rname IS NULL)
-进一步阐述

CREATE TABLE #t1 (amt decimal(18,2), [date] date, rname varchar(50))
INSERT INTO #t1
SELECT 1.9, GETDATE() - 1, NULL
UNION ALL
SELECT 1.9, GETDATE() - 1, NULL
UNION ALL
SELECT 8.9, GETDATE() - 1, NULL
UNION ALL
SELECT 8.9, GETDATE(), NULL
UNION ALL
SELECT 2.9, GETDATE() - 1, 'N1'
UNION ALL
SELECT 2.8, GETDATE() - 1, 'N1'

CREATE TABLE #t2 (total decimal(18,2), [date] date, rname varchar(50))
INSERT INTO #t2
SELECT 0, GETDATE() - 1, NULL
UNION ALL
SELECT 0, GETDATE() - 1, 'N1'

update #t2 set #t2.total = a.total
from (select SUM(amt) as total, date, rname from #t1 group by DATE,RNAME) as a
where a.date = #t2.date and #t2.rname = a.rname
OR (a.date = #t2.date AND #t2.rname IS NULL and a.rname IS NULL)


SELECT * FROM #t2 


我希望它现在清楚了

这只是意味着子查询返回的行数多于1行。您应该确保子查询只返回1行。您可以使用top 1。尝试如下更新表A set Total=amt from select sumbillamtas amt from SALES group by DATE,RNAME。仍然不起作用:见BobTheBuilder的答案。如果子查询返回的行数超过1行,则会产生错误。请按以下方式尝试。仍然不起作用。update tableA set Total=从SALES b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.date也按日期分组时,它仍然提供三行。将其更改为:其中b.date='2014-10-02'。这有帮助吗?这只意味着子查询返回的行数超过1行。您应该确保子查询只返回1行。您可以使用top 1。尝试如下更新表A set Total=amt from select sumbillamtas amt from SALES group by DATE,RNAME。仍然不起作用:见BobTheBuilder的答案。如果子查询返回的行数超过1行,则会产生错误。请按以下方式尝试。仍然不起作用。update tableA set Total=从SALES b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.date也按日期分组时,它仍然提供三行。将其更改为:其中b.date='2014-10-02'。这有帮助吗?哦,好吧,那我怎么才能用每个Rnameperson每天的billamt之和来更新一个表呢??实际上,我正在创建一个临时表并出于某些特定原因更新这些字段。有什么办法吗?像这样试过。仍然不起作用。update tableA set Total=从SALES b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.date运行此查询:从SALES b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.dateohh.k,那么如何使用每个Rnameperson每天的BILLAMT之和更新表格??实际上,我正在创建一个临时表并出于某些特定原因更新这些字段。有什么办法吗?像这样试过。仍然不起作用。更新表格A集合合计=从销售b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.date运行此查询:从销售b中选择sumb.BILLAMT,其中b.date>='2014-10-01'和b.date其工作日期。。但如果Rname为Null,则为total Null。如果rname不在表中,如何更新总计。它正在工作。但有一种情况,Rname在sales表中可以为null。在这种情况下,我需要更新特定日期的账单金额总和。在这种情况下使用另一个更新语句。这次只是按日期分组。它工作了..:使用了另一个更新语句。它工作了。。但如果Rname为Null,则为total Null。如果rname不在表中,如何更新总计。它正在工作。但有一种情况,Rname在sales表中可以为null。在这种情况下,我需要更新特定日期的账单金额总和。在这种情况下使用另一个更新语句。这次只是按日期分组。它工作了..:使用了另一个更新语句。它工作了。但有一种情况,Rname在sales表中可以为null。在这种情况下,我需要更新特定日期的账单金额总和。@Indrah-请参阅编辑后的答案和完整示例。我希望这能解决你的问题,因为它起作用了。但有一种情况,Rname在sales表中可以为null。在这种情况下,我需要用
特定日期的账单金额。@Indrah-请参阅编辑后的答案和完整示例。我希望这能解决你的问题