设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 994|回复: 9
打印 上一主题 下一主题

[查询] 请教查询高手,如果将空白的数据收缩

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-25 11:31:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


很简单的表,数据是AA表,希望使用查询实现BB表的展示效果.

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-4-25 11:34:00 | 只看该作者
在线等答案
3#
发表于 2012-4-25 13:08:36 | 只看该作者
大致看:
好像用查询不行。
可以用代码做,比较复杂
4#
 楼主| 发表于 2012-4-25 13:54:43 | 只看该作者
本帖最后由 xdcow 于 2012-4-25 13:55 编辑


就是将上表的每一行显示一个数字

变成下面的整齐的居上排列.


本帖子中包含更多资源

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

x
5#
发表于 2012-4-26 10:05:56 | 只看该作者
每个记录能不能保证只有一个字段有值?其他字段均为空?
6#
 楼主| 发表于 2012-4-26 08:09:02 | 只看该作者
头皮挠破了,解决了,非常笨的办法来解决的.
1、追加AA表到同样行数的空表,AB(有ID字段)。
2、将AA表中A字段的数据追加到临时表AC,(有ID字段)
3、做一个查询表AD将AC表的ID字段计算出一个新ID字段=dmin("id","ab")+id-1
4、将AD表与AB表关联,并更新A字段
5、再循环运算B字段,C字段……(用代码控制查询表内容的更改)
6、最后再将AB表中A、B、C字段均为空值的行删除

思路如此,方法自我感觉很笨,希望高手有更好的方法。
7#
发表于 2012-4-26 11:37:22 | 只看该作者
很简单嘛。
1、在aa表中建立一个自动编号的ID字段。
2、建立三个查询:
a查询:
SELECT aa.ID, aa.a, DCount("*","aa","ID<=" & [ID] & " and a is not null") AS num
FROM aa
WHERE aa.a Is Not Null
b查询:
SELECT aa.ID, aa.b, DCount("*","aa","ID<=" & [ID] & " and b is not null") AS num
FROM aa
WHERE aa.b Is Not Null
c查询:
SELECT aa.ID, aa.c, DCount("*","aa","ID<=" & [ID] & " and c is not null") AS num
FROM aa
WHERE aa.c Is Not Null
3、将三个查询用num字段联接起来写一个查询:
SELECT a查询.num, a查询.a, b查询.b, c查询.c
FROM (a查询 LEFT JOIN b查询 ON a查询.num = b查询.num) LEFT JOIN c查询 ON a查询.num = c查询.num
8#
发表于 2012-4-28 13:21:47 | 只看该作者
查询有难度.不如就建个bb表吧.用代码解决
Private Sub Command0_Click()

    Dim myArray()
    Dim rs As New ADODB.Recordset
    Dim ia As Integer
    Dim ib As Integer
    Dim ic As Integer
    Dim strSQL As String
   
    rs.Open "aa", CurrentProject.Connection, 3, 1
    If rs.RecordCount > 0 Then
        ReDim myArray(rs.RecordCount, 1 To 3)
        Do While rs.EOF = False
            If Nz(rs("a")) <> "" Then
                myArray(ia, 1) = rs("a")
                ia = ia + 1
            End If
            If Nz(rs("b")) <> "" Then
                myArray(ib, 2) = rs("b")
                ib = ib + 1
            End If
            If Nz(rs("c")) <> "" Then
                myArray(ic, 3) = rs("c")
                ic = ic + 1
            End If
            rs.MoveNext
        Loop
        CurrentDb.Execute "Delete * From bb"
        For i = 0 To rs.RecordCount
            If myArray(i, 1) <> "" Or myArray(i, 2) <> "" Or myArray(i, 3) <> "" Then
                strSQL = "INSERT INTO bb ( a, b, c ) Values ('" & myArray(i, 1) & "','" & myArray(i, 2) & "','" & myArray(i, 3) & "')"
                CurrentDb.Execute strSQL
            End If
        Next i
    End If
    rs.Close
    Set rs = Nothing
    DoCmd.OpenTable "bb"
   
End Sub
9#
发表于 2012-4-29 11:53:00 | 只看该作者
猫猫好!
10#
 楼主| 发表于 2012-5-5 14:35:58 | 只看该作者
咱家是猫 发表于 2012-4-28 13:21
查询有难度.不如就建个bb表吧.用代码解决
Private Sub Command0_Click()

代码很强大,谢谢.慢慢学习.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-31 20:37 , Processed in 0.109530 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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