如何在Access SQL中进行转换/透视但不进行聚合?

时间:2018-09-27 16:31:28

标签: sql ms-access pivot transform

首先,感谢能提供帮助的任何人,我希望这对那些有知识的人来说是一个简单的问题。

我有以下形式的数据:

LeaseID | ChargeID
1 | 1
1 | 2
2 | 3
3 | 4
3 | 5
3 | 6

即LeaseID 1有2个ChargeID

我该如何在Access SQL中查询它,以便将数据反映为

LeaseID | ChargeID | ChargeID | ChargeID
1 | 1 | 2
2 | 3
3 | 4 | 5 | 6

我知道我最多只能有255个列,但这不是问题,因为永远不会有255个列,但是列数应该随着给定租约上的最大ChargeIDs数量而增加。

我认为这与Transform / Pivot有关,但一直无法使其正常工作。我不断收到“交叉表错误太多”

谢谢

1 个答案:

答案 0 :(得分:1)

考虑一个涉及登台表的两步过程:

表查询 (在大表上使用性能较慢的相关子查询)

SELECT t.LeaseID, t.ChargeID, 'ChargeID' & (SELECT count(*) FROM LeaseCharge sub
                                            WHERE sub.LeaseID = t.LeaseID 
                                            AND   sub.ChargeID <= t.ChargeID) As Rank
INTO myStagingTable
FROM myTable t; 

跨表查询

TRANSFORM MAX(s.ChargeID) As MaxChargeID
SELECT  s.LeaseID
FROM myStagingTable s
GROUP BY s.LeaseID
PIVOT s.[Rank]

-- LeaseID  ChargeID1   ChargeID2   ChargeID3
--       1          1           2   
--       2          3       
--       3          4           5           6