轉自: http://www.cnblogs.com/trampt/archive/2008/05/21/1203723.html

 User表
UserId UserName
1      test
2      myName
3      hello
Type表
TypeId TypeName
1      三年制大专
2      五年制大专
3      中专
User_Type表
ID  UserId TypeId Nums
1   1      1      5
2   1      2      3
3   2      1      2
4   2      3      6
5   3      1      10
6   3      2      1
7   3      3      8

我想得出的查询结果是

UserName 三年制大专 五年制大专 中专
test             5          3           0
myName       2          0           6
hello            10         1           8

是个交叉表的查询.用的数据库是Access

要得到这样的结果,可以使用Access中的交叉查Transform

首先,我们必须用左连接查询出

UserId UserName TypeId TypeName Nums因为User和Type表是通过User_Type表建立的联系

左连接查询如下:

select [User].[UserName] as 地区负责人 from (([User] left join [User_Type] on [User].UserId=[User_Type].UserId)  left join [Type] on [User_Type].TypeId=[Type].TypeId)

将结果查询出来之后 就用到transform进行交叉查询.

Transform Sum(Nums)
select [Users].[UserName] as 地区负责人 from (([Users] left join [User_Type] on [Users].UserId=[User_Type].UserId)  left join [Type] on [User_Type].TypeId=[Type].TypeId)  GROUP BY [Users].UserName
PIVOT 
[Type].TypeId)

这样结果就出来了......

 https://files.cnblogs.com/Athrun/Cros.rar