重发一下问题!刚才那个大家都是针对的A表,我的意思是要B表里的数据
注意一下B表里的数据
表A FID name sex
1 小红 女
2 小刚 男
3 小刘 女
4 小明 男 表B
ID FID Score
1 1 80
2 2 70
3 3 90
5 1 60
6 2 50 两表通过FID关联 现在我检索表B中 所有人的得分,重复的人名,分数累加 如下 FID name sex Score
1 小红 女 140(60+80得到的)
2 小刚 男 120(70+50)
3 小刘 女 90
这个sql语句应该如何写呢
注意一下B表里的数据
表A FID name sex
1 小红 女
2 小刚 男
3 小刘 女
4 小明 男 表B
ID FID Score
1 1 80
2 2 70
3 3 90
5 1 60
6 2 50 两表通过FID关联 现在我检索表B中 所有人的得分,重复的人名,分数累加 如下 FID name sex Score
1 小红 女 140(60+80得到的)
2 小刚 男 120(70+50)
3 小刘 女 90
这个sql语句应该如何写呢
GROUP BY A.FID ,A.Name ,A.[sex]
(select sum(Score) from tb where FID=a.FID)
from ta a
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-19 15:54:23
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go
create table [A]([FID] int,[name] varchar(4),[sex] varchar(2))
insert [A]
select 1,'小红','女' union all
select 2,'小刚','男' union all
select 3,'小刘','女' union all
select 4,'小明','男'
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go
create table [B]([ID] int,[FID] int,[Score] int)
insert [B]
select 1,1,80 union all
select 2,2,70 union all
select 3,3,90 union all
select 5,1,60 union all
select 6,2,50
--------------开始查询--------------------------
select
a.*,b.Score as Score
from
a
join
(select fid,sum(score) as Score from b group by fid) b
on
a.FID=b.FID ----------------结果----------------------------
/* FID name sex Score
----------- ---- ---- -----------
1 小红 女 140
2 小刚 男 120
3 小刘 女 90(3 行受影响)
*/
select a.FID , a.name , a.sex , sum(b.Score) Score from a , b
where a.FID = b.FID
group by a.FID , a.name , a.sex
insert into a values(1 , '小红' , '女')
insert into a values(2 , '小刚' , '男')
insert into a values(3 , '小刘' , '女')
insert into a values(4 , '小明' , '男')
create table b(ID int, FID int, Score int)
insert into b values(1 , 1 , 80 )
insert into b values(2 , 2 , 70 )
insert into b values(3 , 3 , 90 )
insert into b values(5 , 1 , 60 )
insert into b values(6 , 2 , 50 )
goselect a.FID , a.name , a.sex , sum(b.Score) Score from a , b where a.FID = b.FID group by a.FID , a.name , a.sexdrop table a , b/*
FID name sex Score
----------- ---------- ---------- -----------
1 小红 女 140
2 小刚 男 120
3 小刘 女 90(所影响的行数为 3 行)
*/
Inner join 表A a on b.FID=a.FID
2 小? 男 120
3 小? 女 90
4 小明 男 NULL按上次那个写法,有个分数NULL的记录
这个我倒是可以自己解决,就是感觉不是那么直接,呵呵!
declare @tb1 table([FID] int,[name] varchar(4),[sex] varchar(2))
insert @tb1
select 1,'小红','女' union all
select 2,'小刚','男' union all
select 3,'小刘','女' union all
select 4,'小明','男'
--> 测试数据:@tb2
declare @tb2 table([ID] int,[FID] int,[Score] int)
insert @tb2
select 1,1,80 union all
select 2,2,70 union all
select 3,3,90 union all
select 5,1,60 union all
select 6,2,50
select t1.*, Score=sum(score) from @tb1 t1 join @tb2 t2 on t1.fid=t2.fid
group by t1.fid,t1.name,t1.sex/*
FID name sex Score
----------- ---- ---- -----------
1 小红 女 140
2 小刚 男 120
3 小刘 女 90(3 行受影响)
*/
Inner join A a on b.FID=a.FID group by b.FID,a.Name,a.sex