注册 登录
编程论坛 SQL Server论坛

求 主从表查询语句

jockey 发布于 2007-11-28 14:47, 1892 次点击
表A:
id,姓名,年龄
1  张三  20
2  马六  21
5  王二  22
表B:
id,课程,出勤
1  化学    3
1  化学    2
5  物理    6
2  化学    1

要求实现下面的查询:

id,姓名,年龄 ,出勤总天数,化学天数
1  张三  20             5               5
5  王二  22             6               0
2  马六  21             1               1
关键是这个0怎么得出啊

[[italic] 本帖最后由 jockey 于 2007-11-29 11:24 编辑 [/italic]]
15 回复
#2
jockey2007-11-28 14:54
select 姓名,年龄,sum(出勤总天数),sum(化学天数) from (select A.姓名,A.年龄,B.出勤 as 出勤总天数,?????) as t group by 姓名


[[italic] 本帖最后由 jockey 于 2007-11-28 15:00 编辑 [/italic]]
#3
purana2007-11-28 14:58
2楼是什么意思?..
是已经做出来了..还是啥?..
#4
jockey2007-11-28 14:59
没做出来  那个 0不会写
#5
XieLi2007-11-28 15:04
DECLARE @A TABLE (ID INT ,NAME VARCHAR(10) ,AGE INT)

INSERT INTO @A SELECT 1  ,'张三',  20
UNION SELECT 2,  '马六',  21
UNION SELECT 5,  '王二',  22



DECLARE @B TABLE (ID INT ,ID1 VARCHAR(10) ,ID2 INT)

INSERT INTO @B SELECT 1 , '化学',    3
UNION SELECT 1 , '化学',    2
UNION SELECT 5,  '物理',    6

SELECT A.ID,A.NAME,A.AGE,B.COL1,(CASE C.ID1  WHEN '化学' THEN C.COL2 ELSE 0 END) AS 化学       FROM @A   A ,(SELECT ID,SUM(ISNULL(ID2,0)) AS COL1 FROM @B  GROUP BY ID) B,(SELECT ID,ID1 ,SUM(ISNULL(ID2,0))  AS COL2 FROM @B GROUP BY ID,ID1) C WHERE A.ID=B.ID AND A.ID=C.ID
#6
purana2007-11-28 15:05
有三个人的..怎么显示只有两个?
#7
XieLi2007-11-28 15:09
你的电脑有问题啦!
#8
purana2007-11-28 15:10
已经被做出来了..
#9
jockey2007-11-28 15:10
成了!谢谢XieLi!!!
#10
purana2007-11-28 15:19
这奇怪?..
马六不是有一个化学的吗?
#11
XieLi2007-11-28 15:23
他应该没有写出来吧!
#12
purana2007-11-28 15:24
create table 表A(
id int,
姓名 varchar(10),
年龄 int
)
insert into 表A values(1,'张三',20)
insert into 表A values(2,'马六',21)
insert into 表A values(5,'王二',22)

create table 表B(
id int,
课程 varchar(10),
出勤 int
)
insert into 表B values(1,'化学',3)
insert into 表B values(1,'化学',2)
insert into 表B values(5,'物理',6)
insert into 表B values(2,'化学',1)

select a.id,a.姓名,a.年龄,出勤总天数=isnull(b.出勤总天数,0),化学出勤天数=isnull(b.化学出勤天数,0)
from 表A a
left join
(select id,sum(出勤) 出勤总天数,sum(case when 课程='化学' then 出勤 else 0 end) 化学出勤天数 from 表B group by id) b
on a.id=b.id

drop table 表A,表B


/*
id          姓名         年龄          出勤总天数       化学出勤天数      
----------- ---------- ----------- ----------- -----------
1           张三         20          5           5
2           马六         21          1           1
5           王二         22          6           0
(所影响的行数为 3 行)
*/
#13
jockey2007-11-28 15:24
B里面没有马六的纪录....


高手们你们都怎么学的sql,佩服啊!
#14
purana2007-11-28 15:26
你的表B里..明明有马六的记录嘛..还说没有?.
#15
jockey2007-11-29 06:27
我晕啊,各位老大,如果不用
case when 课程='化学' then 出勤 else 0 end

还有别的语句么?

vfp竟然不支持case when then
#16
purana2007-11-29 06:32
vfpi 不支持case语句..那可能会有其它的语句代码..可能是iif什么的..看看帮助..
1