我有两个表t1和t2, t1的数据如下:
Id。名称
1. Ab
2. Dc
3.镉
t2具有给定的数据:
Id。收入
1. 100
2. 0
3. 200
我的SQL查询是:
select t1.id ,t1.name,sum(t2.rev)
from t1
inner join t2 on t1.id= t2.id
where t1.id=100 and t2.Revenue <> 0
group by t1.id
答案 0 :(得分:0)
只需将您要选择的GROUP BY
列:
select t1.id ,t1.name,sum(t2.rev)
from t1
inner join t2 on t1.id= t2.id
where t1.id=100 and t2.Revenue <> 0
group by t1.id, t1.name, t2.rev
该错误表示您在SUM
字段中有t2.rev
-一行,但是SQL Server也有许多行具有计算列,并且它不知道确切选择哪一行
更新:
如果您某列中的一个具有诸如text
,ntext
或image
之类的类型,则应将其强制转换为NVARCHAR
类型:
select t1.id ,t1.name,sum(t2.rev)
from t1
inner join t2 on t1.id= t2.id
where t1.id=100 and t2.Revenue <> 0
group by t1.id, CAST( t1.name AS NVARCHAR(100)), CAST( t2.rev AS NVARCHAR(100))
更新1:
TEXT
,NTEXT
和IMAGE
是变量的旧类型,并且其中的类型已弃用。因此,这些类型将由相应的类型VARCHAR(MAX)
,NVARCHAR(MAX)
和VARBINARY(MAX)
替换或强制转换。
如果您只有TEXT
类型的一列,那么仅CAST
就是这一列:
select t1.id ,t1.name,sum(t2.rev)
from t1
inner join t2 on t1.id= t2.id
where t1.id=100 and t2.Revenue <> 0
group by t1.id, CAST( t1.name AS NVARCHAR(100)), t2.rev
答案 1 :(得分:0)
如果有的话,导致错误的列将为t1.name1
。由于名称完全取决于ID,因此您可以人为地将其添加到group by
子句中,而不会损害查询的正确性:
select t1.id ,t1.name,sum(t2.rev)
from t1
inner join t2 on t1.id= t2.id
where t1.id=100 and t2.Revenue <> 0
group by t1.id, t1.name
答案 2 :(得分:0)
如果您要显示任何一列,并且使用了分组依据,那么您还必须将这些列按一个分组
select t1.id ,t1.name,sum(t2.Revenue) from t1
inner join t2 on t1.id= t2.id where t1.id=1 and t2.Revenue <> 0 group by t1.id,t1.Name