设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2088|回复: 13
打印 上一主题 下一主题

[查询] 交叉表查询结果怎样缩减空格

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-11 15:50:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
那位老师,帮我看看我做的菜单怎样缩减空格,从而让菜单更短,更合理,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-12-11 16:17:30 | 只看该作者
try
ado
3#
发表于 2011-12-11 21:32:17 | 只看该作者
不妨参考下猫版的:
打卡记录交叉查询的解决方法
4#
发表于 2011-12-12 01:21:33 | 只看该作者
  1. Function IsTblExist(strTableName As String) As Boolean
  2.     Dim obj As AccessObject
  3.     IsTblExist = False
  4.     For Each obj In CurrentData.AllTables
  5.         If obj.Name = strTableName Then
  6.             IsTblExist = True
  7.             Exit For
  8.         End If
  9.     Next
  10. End Function
  11. Private Sub Command0_Click()
  12.     Dim rs As New ADODB.Recordset
  13.     Dim rst As New ADODB.Recordset
  14.     Dim tblrs As New ADODB.Recordset
  15.     Dim cnn As New ADODB.Connection
  16.     Dim intCount As Long
  17.     Dim sSQL As String
  18.     Dim strSQL As String
  19.     Dim strFiledName As String
  20.     Set cnn = CurrentProject.Connection
  21.     If IsTblExist("tbl") Then
  22.         DoCmd.DeleteObject acTable, "tbl"
  23.     End If
  24.     strSQL = "CREATE TABLE tbl(餐次 string,"
  25.     sSQL = "select distinct 周 from 一周菜单 order by 周 desc"
  26.     rs.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
  27.     Do While Not rs.EOF
  28.         strSQL = strSQL & rs.Fields(0) & " string,"
  29.         rs.MoveNext
  30.     Loop
  31.     strSQL = Left(strSQL, Len(strSQL) - 1) & ")"
  32.     cnn.Execute strSQL
  33.     rs.MoveFirst
  34.     tblrs.Open "tbl", cnn, adOpenKeyset, adLockOptimistic
  35.     Do While Not rs.EOF
  36.         strFiledName = rs.Fields(0)
  37.         sSQL = "select 餐次,菜名称,周 from 一周菜单 where 周='" & strFiledName & "'"
  38.         rst.Open sSQL, cnn, adOpenKeyset, adLockReadOnly

  39.         Do While Not rst.EOF
  40.             If rst.Fields("周") = "周一" Then
  41.                 tblrs.AddNew
  42.                 tblrs.Fields("餐次") = rst.Fields("餐次")
  43.             ElseIf intCount = 0 Then
  44.                 tblrs.MoveFirst
  45.                 intCount = intCount + 1
  46.             Else
  47.                 tblrs.MoveNext
  48.             End If
  49.             tblrs.Fields(strFiledName) = rst.Fields("菜名称")
  50.             tblrs.Update
  51.             rst.MoveNext
  52.         Loop
  53.         rst.Close
  54.         rs.MoveNext
  55.     Loop
  56.     rs.Close
  57.     DoCmd.OpenTable "tbl", acViewNormal
  58.     Set rst = Nothing
  59.     Set tblrs = Nothing
  60.     Set rs = Nothing
  61.     Set cnn = Nothing
  62. End Sub
复制代码
5#
 楼主| 发表于 2011-12-12 07:38:11 | 只看该作者
非常感谢版主 Henry.D.Sy 给我这么多的帮助。
6#
 楼主| 发表于 2011-12-12 07:38:59 | 只看该作者
Henry D. Sy 发表于 2011-12-12 01:21

非常感谢 Henry.D.Sy 给我这么多的帮助。
7#
 楼主| 发表于 2011-12-12 08:35:08 | 只看该作者
roych 发表于 2011-12-11 21:32
不妨参考下猫版的:
打卡记录交叉查询的解决方法

谢谢roych
8#
 楼主| 发表于 2011-12-13 20:05:21 | 只看该作者
Henry D. Sy 发表于 2011-12-12 01:21

老师,我调试了你给我代码,但当我增加周四,或增加早餐时,程序就出错,能再帮我看看吗,我要求能任意增加餐次,如夜宵,早餐等,要周一到周日,谢谢!
9#
发表于 2011-12-14 00:01:46 | 只看该作者
还是用家猫的方法吧!

查询A
  1. SELECT id, 餐次, 菜名称, 周, "菜单" & DCount("id","一周菜单","周='" & [周] & "' And 餐次='" & [餐次] & "' And id<=" & [id]) AS 菜单
  2. FROM 一周菜单
复制代码
  1. TRANSFORM Last(A.菜名称) AS 菜名称之最后一条记录
  2. SELECT A.餐次, A.周
  3. FROM A
  4. GROUP BY A.餐次, A.周
  5. PIVOT A.菜单;
复制代码
10#
 楼主| 发表于 2011-12-14 12:35:10 | 只看该作者
Henry D. Sy 发表于 2011-12-14 00:01
还是用家猫的方法吧!

查询A

非常谢谢老师,我在琢磨琢磨。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-18 14:54 , Processed in 0.089266 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表