Office中国论坛/Access中国论坛

标题: 请教查询高手,如果将空白的数据收缩 [打印本页]

作者: xdcow    时间: 2012-4-25 11:31
标题: 请教查询高手,如果将空白的数据收缩
[attach]49077[/attach]

很简单的表,数据是AA表,希望使用查询实现BB表的展示效果.
作者: xdcow    时间: 2012-4-25 11:34
在线等答案
作者: aslxt    时间: 2012-4-25 13:08
大致看:
好像用查询不行。
可以用代码做,比较复杂
作者: xdcow    时间: 2012-4-25 13:54
本帖最后由 xdcow 于 2012-4-25 13:55 编辑

[attach]49079[/attach]
就是将上表的每一行显示一个数字

变成下面的整齐的居上排列.
[attach]49078[/attach]


作者: xdcow    时间: 2012-4-26 08:09
头皮挠破了,解决了,非常笨的办法来解决的.
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字段均为空值的行删除

思路如此,方法自我感觉很笨,希望高手有更好的方法。
作者: Henry D. Sy    时间: 2012-4-26 10:05
每个记录能不能保证只有一个字段有值?其他字段均为空?
作者: todaynew    时间: 2012-4-26 11:37
很简单嘛。
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
作者: 咱家是猫    时间: 2012-4-28 13:21
查询有难度.不如就建个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

作者: Henry D. Sy    时间: 2012-4-29 11:53
猫猫好!
作者: xdcow    时间: 2012-5-5 14:35
咱家是猫 发表于 2012-4-28 13:21
查询有难度.不如就建个bb表吧.用代码解决
Private Sub Command0_Click()

代码很强大,谢谢.慢慢学习.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3