一个简单的sql问题(50分)

  • 主题发起人 主题发起人 套牢
  • 开始时间 开始时间

套牢

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个相互关联的表
A | B
a 1 true | a 3
b 5 false | a 5
| b 3
要求查询结果为:
a 1 true 8
b 5 false 3
就是依据一个字段先对B统计,再与A连接起来。

select A.字段1,字段2,字段3,sum(B.字段2) from A join B on A.字段1=B.字段1
group by A.字段1,字段2,字段3
总是提示bit字段无法group,但该字段又是必须的,请问如何是好呀?
 
我记得在sql server是把bool型转换为字符串再group by
 
我就用的sql server,在哪里转化呀?
 
用cast或convert函数。
 
我的变通的方法:
先 select 字段1,sum(字段2) as 字段2 from b group by 字段1
把他写入临时表temp;
然后select a.字段1,a.字段2,a.字段3,b.字段2 from A表 a,temp b where a.字段1=b.字段1

我试过的;


 
或者直接select 字段1,sum(字段2) as 字段2 into newtable from b group by 字段1
用完后把他给drop掉
 
写入临时表:如果是一个存储过程,如何把生成返回值,并放入一个query中。
如果不用存储过程下列的语句又怎样执行
select 序号 sum(重量)as 总量,sum(件数)as 总件数 into newtable from 丝类进仓单商品信息 group by 进仓单号
go
select * from table1 a join newtable on a.序号=newkhhh.序号
go
drop table newtable
go
注意,最后的结果要放在一个query中
 
写入临时表:如果是一个存储过程,如何把生成返回值,并放入一个query中。
如果不用存储过程下列的语句又怎样执行
select 序号 sum(重量)as 总量,sum(件数)as 总件数 into newtable from 表2 group by 序号
go
select * from 表1 a join newtable on a.序号=newtable .序号
go
drop table newtable
go
注意,最后的结果要放在一个query中
 
用不到临时表
用几个select完事
可参考
select (select sum(b.field) where..) as field,
(select case when true .. else.) as boolfield,
 
在 MSSQL 中
create table #a(a1 char(1),a2 int,a3 bit)
insert #a values('a',1,1)
insert #a values('b',5,0)
create table #b(b1 char(1),b2 int)
insert #b values('a',3)
insert #b values('a',5)
insert #b values('b',3)

select A.a1,a.a2,convert(int,a.a3) a3,sum(B.b2) b2
from #A a join #b b on A.a1=B.b1
group by A.a1,a.a2,convert(int,a.a3)
注意:将a3 转换 由 bit 转换成 int

 
确实如lanny所言,用几个子查询就已经可以实现。
 
后退
顶部