如何以逗号分隔的形式在单行中显示多个记录

时间:2017-01-08 07:34:58

标签: ms-access ms-access-2010 ms-access-2007 ms-access-2013

我是MS Access的新手。

如何在MS Access中以逗号分隔的单行中显示多个记录?

例如我有一张表

state
AL
AK
MA
HI
TX
VI
GU

我想按如下所示检索数据

State
AL, AK, MA, HI, TX, VI, GU

有人可以帮我查询吗?

2 个答案:

答案 0 :(得分:0)

您可以撰写以下内容" Crosstab"查询所以将成为字段:

TRANSFORM First(table1.state) AS FirstOfstate
SELECT "State" AS Expr1
FROM table1
GROUP BY "State"
PIVOT table1.state;

或在GUI中:

enter image description here

答案 1 :(得分:0)

一个选项是创建一个函数,该函数将返回连接的值列表:

Public Function ConcatenateField( _
    ByVal Source As String, _
    ByVal Field As String, _
    Optional ByVal Separator As String = ";") _
    As String

    ' 2011-04-17. Gustav Brock, Cactus Data ApS, CPH.

    Dim rs          As DAO.Recordset

    Dim Rows        As Variant
    Dim Fields()    As Variant
    Dim Sql         As String
    Dim Item        As Integer
    Dim ItemList    As String

    ' Retrieve one field from table or query.
    Sql = "Select [" & Field & "] From [" & Source & "] Order By 1 Asc"
    Set rs = CurrentDb.OpenRecordset(Sql, dbOpenSnapshot)
    If rs.RecordCount > 0 Then
        ' Fill array.
        Rows = rs.GetRows(rs.RecordCount)
        ' Convert array to one dimension.
        ReDim Fields(UBound(Rows, 2))
        For Item = LBound(Rows, 2) To UBound(Rows, 2)
            Fields(Item) = Rows(0, Item)
        Next
        ' Create concatenated value list.
        ItemList = Join(Fields(), Separator)
    End If
    rs.Close

    Set rs = Nothing

    ConcatenateField = ItemList

End Function

然后使用这个表达式:

=ConcatenateField("YourTableName", "State", ", ")

或在查询中:

Select Top 1 
    ConcatenateField("YourTableName", "State", ", ") As States 
From 
    YourTableName