日期:2014-05-16  浏览次数:20886 次

access多表查询菜鸟问题2!
有如下结构个表 
jbqk 表 

id name birtheday bj xh  
1 张三 1980-1-2 1 006554
2 李四 1980-1-2 2 003259

bj 表 
id name fid
1 一班 3
2 二班 3
3 初一 0

km 表
id name
1 语文
2 数学
3 英语

cjb 表
id xh name kmid cj datetime
1 006554 张三 1 65 2007-1-6
2 006554 张三 2 75 2007-1-6
3 003259 李四 1 68 2007-1-7
4 003259 李四 2 80 2007-1-7
5 006554 张三 1 85 2007-6-6
6 006554 张三 2 95 2007-6-6
7 003259 李四 1 88 2007-6-7
8 003259 李四 2 89 2007-6-7

如果想查询结果是 
name xh bj 语文 数学  
张三 006554 一班 65 75
李四 003259 二班 68 80
张三 006554 一班 85 95
李四 003259 二班 88 89
该如何写sql语句呢? 
如果仅仅显示:(最近一次成绩)
name xh bj 语文 数学  
张三 006554 一班 85 95
李四 003259 二班 88 89
或者(某人单项成绩该)
name xh bj 语文 数学  
张三 006554 一班 65 75
张三 006554 一班 85 95

又该如何写sql语句呢!

 
 


------解决方案--------------------
或者(某人单项成绩该)
name xh bj 语文 数学
张三 006554 一班 65 75
张三 006554 一班 85 95

transform max(cj)
select name,xh,bjname,datetime from 
(SELECT d.*, e.name AS bjname
FROM (SELECT a.*, b.name AS kmname, c.bj
FROM (cjb AS a INNER JOIN km AS b ON a.kmid = b.id) INNER JOIN jbqk AS c ON a.xh = c.xh) AS d LEFT JOIN bj AS e ON d.bj=e.id
) where xh=6554 group by name,xh,bjname,datetime 

pivot kmname 

name xh bj 语文 数学
张三 006554 一班 65 75
李四 003259 二班 68 80
张三 006554 一班 85 95
李四 003259 二班 88 89
该如何写sql语句呢?
transform max(cj)
select name,xh,bjname,datetime from 
(SELECT d.*, e.name AS bjname
FROM (SELECT a.*, b.name AS kmname, c.bj
FROM (cjb AS a INNER JOIN km AS b ON a.kmid = b.id) INNER JOIN jbqk AS c ON a.xh = c.xh) AS d LEFT JOIN bj AS e ON d.bj=e.id
) group by name,xh,bjname,datetime 

pivot kmname 
自己排序


如果仅仅显示:(最近一次成绩)
name xh bj 语文 数学
张三 006554 一班 85 95
李四 003259 二班 88 89 


------解决方案--------------------
如果仅仅显示:(最近一次成绩)
name xh bj 语文 数学
张三 006554 一班 85 95
李四 003259 二班 88 89

TRANSFORM max([cj])
SELECT [name], [xh], [bjname]
FROM (SELECT a.*, b.cj
FROM (SELECT [name], [xh],kmname,kmid, [bjname], max([datetime]) as ma
FROM 查询3
GROUP BY [name], [xh],kmname, kmid,[bjname]) AS a LEFT JOIN cjb AS b ON (a.ma=b.[datetime]) AND (a.xh=b.xh) AND (a.kmid=b.kmid)
)
GROUP BY [name], [xh], [bjname]
PIVOT [kmname];