Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

根据人员住宿信息表及宿舍清单,查询出宿舍入住信息表

邓喆  发表于:2021-01-03 02:25:35  
复制

请问如何根据表1人员住宿信息表及表2宿舍清单,查询出表3宿舍入住信息表?

表1人员住宿信息表
学号 宿舍号
1601 101
1602 102
1603 101
1604 102
1605 102
1606 104
1607 103
1608 105

   与
表2宿舍表
宿舍号 可住人数
101 4
102 6
103 2
104 2
105 2
106 3
107 2

得出  

表3房间入住信息表
宿舍号 可住人数 入住人数 1 2 3 4 5 6
101 4 2 1601 1603
102 4 3 1602 1604 1605
103 2 1 1607
104 2 1 1606
105 2 1 1608
106 3 0
107 2 0
多谢各位高手支持!

 

Top
西出阳关无故人 发表于:2021-01-03 18:52:42

1,新建查询"住宿查询1",SQL语法:

SELECT 人员住宿信息表.宿舍号, 人员住宿信息表.学号, DCount("*","人员住宿信息表","宿舍号='" & [宿舍号] & "' and 学号<='" & [学号] & "'") AS 顺序
FROM 人员住宿信息表;


2,新建查询"住宿查询2",SQL语法:

TRANSFORM Last(住宿查询1.学号) AS 学号之Last
SELECT 住宿查询1.宿舍号 AS 这列不要显示, Count(住宿查询1.学号) AS 入住人数
FROM 住宿查询1
GROUP BY 住宿查询1.宿舍号
PIVOT 住宿查询1.顺序;

3,新建查询"住宿查询3",SQL语法:

SELECT 宿舍表.宿舍号, 宿舍表.可住人数, 住宿查询2.*
FROM 宿舍表 LEFT JOIN 住宿查询2 ON 宿舍表.宿舍号=住宿查询2.这列不要显示;



运行"住宿查询3"

把"这列不要显示"隐藏后,结果与你的要求很接近,只是没有所有房间中均没有人住的那些列,例如"4","5","6"列,如图:



西出阳关无故人 发表于:2021-01-03 19:00:30
如果要跟需求完全一致,就要动用vba进行建表填充数据,也可以得到.

vious 发表于:2021-01-04 13:06:07
建议人员住宿信息表中有床位号,会有更多的用处的

邓喆 发表于:2021-01-04 19:24:44

非常感谢西出阳关无故人的详细回答,困扰了好两天,不用完全一样,这个结果完全满足我的需求了,非常好了。也感谢vious的建议。


谢谢您们的帮助!



总记录:4篇  页次:1/1 9 1 :