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];