节前送分了:大家帮我看看这句SQL语句错在哪里?

barljy 2008-04-03 09:43:12
Create Table #Test(FID int, FNumber varchar(200),FBillNo varchar(200),FAmount decimal(18,4))
insert into #Test(FID,FNumber,FBillNo)
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4
update t1 set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) from #Test t1
select * from #Test
drop table #Test
错误提示:列 't1.FID' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
我不太明白,请高手赐教!个人愚见UPDATE语句中无需GROUP BY子句。
...全文
84 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhuhuahuan 2008-04-05
我觉得嘛你还是在看看。..
回复
qiudan198206 2008-04-05
如果只是update的話那是不用Group by 的,問題出在
(select sum(FAmount) from A where FType=6 and FID=t1.FID)這里,
這一句你調用了sum聚合函數,而且後面你又用了FID=t1.FID這一條件,而
t1.FID的值并不是唯一的,所以建議在
select sum(FAmount) from A where FType=6 and FID=t1.FID group by FID,
沒有試過不知道對不對.
回复
dl110 2008-04-03
10楼回答有误:

/* 第2句 */ update #Test set #Test.FAmount=(select sum(FAmount) from A where FType=6 and FID=#Test.FID) -- from #Test t1
回复
-狙击手- 2008-04-03
可是没有异常呀


Create Table #Test(FID int, FNumber varchar(200),FBillNo varchar(200),FAmount decimal(18,4)) 
create table a (ftype int,fid int,famount int)
go

update t1
set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID)
from #Test t1

drop table #test,a

/*


(所影响的行数为 0 行)


*/
回复
barljy 2008-04-03
16楼的语句是错误的
回复
pt1314917 2008-04-03

--try
update #Test set FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) from #Test t1
回复
barljy 2008-04-03
[Quote=引用 14 楼 happyflystone 的回复:]
update应该没问题


主要是那个insert 列名有点不对劲
[/Quote]
INSERT语句有什么不对啊
我把UPDATE语句去掉,完全没有错误啊
说了错误在UPDATE语句上
回复
-狙击手- 2008-04-03
update应该没问题


主要是那个insert 列名有点不对劲
回复
pt1314917 2008-04-03
[Quote=引用 11 楼 barljy 的回复:]
引用 8 楼 pt1314917 的回复:
SQL code
--恩。估计跟二楼说的一样
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4

看A表中是否有FID列。。。

A表中有FID列的,不然插入语句就会报错了
提示错误在UPDATE语句中的FID
[/Quote]

--try
update #Test set FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) from #Test t1
回复
barljy 2008-04-03
-- 第2句 语法错误:
/* 第2句 */ update #Test t1 set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) -- from #Test t1

10楼的朋友,你写的这个语句也有语法错误
我刚才测试过了
回复
barljy 2008-04-03
[Quote=引用 8 楼 pt1314917 的回复:]
SQL code
--恩。估计跟二楼说的一样
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4

看A表中是否有FID列。。。
[/Quote]
A表中有FID列的,不然插入语句就会报错了
提示错误在UPDATE语句中的FID
回复
dl110 2008-04-03
以楼主提供的SQL语句看应该有以下4句:

/* 第1句 */ Create Table #Test(FID int, FNumber varchar(200),FBillNo varchar(200),FAmount decimal(18,4))
insert into #Test(FID,FNumber,FBillNo)
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4
/* 第2句 */ update t1 set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) from #Test t1
/* 第3句 */ select * from #Test
/* 第4句 */ drop table #Test

-- 第2句 语法错误:
/* 第2句 */ update #Test t1 set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID) -- from #Test t1
回复
barljy 2008-04-03
提示UPDATE语句有错误
PS:3楼的什么意思?写的代码和我的没什么区别啊
回复
pt1314917 2008-04-03

--恩。估计跟二楼说的一样
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4

看A表中是否有FID列。。。
回复
barljy 2008-04-03
不是的
要取的就是表T1中的FID字段
而表t1和t2是通过t1.FContactID=t2.FID关联的
提示有错的是UPDATE语句中的t1.FID啊
回复
tianhuo_soft 2008-04-03
Create Table #Test(FID int, FNumber varchar(200),FBillNo varchar(200),FAmount decimal(18,4))
insert into #Test(FID,FNumber,FBillNo)

这条能用? 这就有问题 FID应该插入 数字 ,FNumber 插入字符串
回复
pt1314917 2008-04-03

--语法上似乎没什么错误。


回复
-狙击手- 2008-04-03
是了,

insert into #Test(FID,FNumber,FBillNo)
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4

两个不 一样
回复
-狙击手- 2008-04-03
create table a(ftype int,fid int,famount int)
go
Create Table #Test(FID int, FNumber varchar(200),FBillNo varchar(200),FAmount decimal(18,4))
go
insert into #Test(FID,FNumber,FBillNo)
select distinct t1.FID,t1.FCustomer,t2.FExplanation
from A t1 left join B t2 on t1.FContactID=t2.FID
where t1.FType=4


update t1
set t1.FAmount=(select sum(FAmount) from A where FType=6 and FID=t1.FID )
from #Test t1
select * from #Test
drop table #Test
回复
中国风 2008-04-03
t1.FID改为t1.FContactID
回复
加载更多回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-03 09:43
社区公告
暂无公告