Как преобразовать / развернуть в Access SQL, но без агрегирования? - PullRequest
0 голосов
/ 27 сентября 2018

Во-первых, спасибо всем, кто может помочь, я надеюсь, что это простой вопрос для тех, кто в курсе.

У меня есть Данные, которые имеют вид:

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

то есть LeaseID 1 имеет 2 ChargeIDs

Как я могу запросить это в Access SQL, чтобы данные отображались как

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

Я знаю, что я ограничен 255 столбцами, но это непроблема в том, что никогда не будет 255, но количество столбцов должно увеличиться с максимальным количеством ChargeIDs для данной аренды.

Я считаю, что это как-то связано с Transform / Pivot, но не смог заставить его работать,Я продолжаю получать сообщение об ошибке "слишком много кросс-таблиц"

Спасибо,

1 Ответ

0 голосов
/ 27 сентября 2018

Рассмотрим двухэтапный процесс с использованием промежуточной таблицы:

Запрос таблицы составления (использование коррелированного подзапроса с низкой производительностью на очень больших таблицах)

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
...