Transform/Transpose MS Access 中的行到列

Transform/Transpose rows to columns in MS Access

我在 Access 数据库中有一个 table,我想在 MS Access 中使用 SQL 查询将 AT_cd 列转换为行(如下结果 table)但我无法正确转换它。我尝试使用以下查询进行转换,但它正在将 AT_cd 转换为 200 多列。我不确定如何更正我的查询。下面是提供的示例 table 和期望的结果 table。非常感谢任何帮助。

Table:

ID  AT_cd
01  BB01A
01  IZ76N
02  AC21B
02  AX30A
02  ZA98A
03  AC21N
03  ZA76M
03  RT67T
04  QS70P
04  TR67A
04  GB45L
04  AC78M

想要的结果:

ID      AT_cd1  AT_cd2  AT_cd3  AT_cd4
01      BB01A   IZ76N       
02      AC21B   AX30A   ZA98A   
03      AC21N   ZA76M   RT67T   
04      QS70P   TR67A   GB45L   AC78M

代码:

TRANSFORM FIRST(AT_cd)
SELECT [ID]
FROM Table1
GROUP BY [ID]
PIVOT AT_cd

恐怕你想要的是不可能的。您正试图根据记录列表中记录的顺序获取结果,但无法做到这一点。您需要创建一个特定的字段来说明顺序,然后就可以了。表示订单的字段类似于:

ID  AT_cd  Order
01  BB01A  AT_cd1
01  IZ76N  AT_cd2
02  AC21B  AT_cd1
02  AX30A  AT_cd2
02  ZA98A  AT_cd3
03  AC21N  AT_cd1
03  ZA76M  AT_cd2
03  RT67T  AT_cd3
04  QS70P  AT_cd1
04  TR67A  AT_cd2
04  GB45L  AT_cd3
04  AC78M  AT_cd4

执行此操作后,以下转换会产生您想要的结果:

TRANSFORM First(AT_cd)
SELECT ID
FROM Table_name
GROUP BY ID
ORDER BY ID
PIVOT Order

更多信息请见 LightningGuide.net

使用 DCount 您可以使用此查询来关闭,该查询还将对列值进行排序:

TRANSFORM 
    First(QueryQ.AT_cd)
SELECT 
    QueryQ.ID
FROM
    (SELECT 
        ID, 
        AT_cd, 
        "AT_cd" & CStr(DCount("*", "TableQ", "[ID] = '" & ID & "' And [AT_cd] <= '" & AT_cd & "'")) AS Sequence
    FROM 
        TableQ) As QueryQ 
GROUP BY 
    QueryQ.ID
PIVOT 
    QueryQ.Sequence;

Edit:来自 Duane Hookom 有人建议我只使用 SQL 这种替代方法,因此可能更快:

TRANSFORM 
    First(QueryQ.AT_cd)
SELECT 
    QueryQ.ID
FROM 

    (SELECT TableQ.ID, TableQ.AT_cd, Count(TableQ.AT_cd) AS Sequence
    FROM TableQ 
    INNER JOIN TableQ AS TableQ_1 ON TableQ.ID = TableQ_1.ID
    WHERE (((TableQ.AT_cd)>=[TableQ_1].[AT_cd]))
    GROUP BY TableQ.ID, TableQ.AT_cd) As QueryQ

GROUP BY 
    QueryQ.ID
PIVOT 
    "AT_cd" & QueryQ.Sequence;