2015-04-13 2 views
1

У меня есть таблица доступа, которая имеет UniqueId и несколько phone Numbers на Id.
Могу ли я перевернуть эти номера телефонов в отдельные столбцы? Есть 160 thds plus строк с бесчисленным номером телефона #Как свертывать столбцы на основе текста с помощью сводного запроса

Все поля являются полями TEXT.

ID   Phone 
    1   502 
    1   402 
    2   375 
    3   502 
    4   777 
    4   645 

Результаты Я хотел бы видеть ...

ID   Phone1  Phone2  Phone3 
    1   502   402  
    2   375 
    3   502 
    4   777   645 
+0

Поскольку неясно, какую стратегию вы пытаетесь, существует слишком много возможных ответов на размышления; поскольку многие из них могут выходить за пределы вашего инженерного уровня. Мы не знаем, так как вы не опубликовали то, что вы пробовали –

+0

Я обновил свой ответ, чтобы включить, как обрабатывать тот факт, что все поля являются текстовыми полями. Удачи! –

+0

Это было очень полезно и работает. Я начал разлагать формулу Dcount, чтобы попытаться понять концепцию. row_id: «Phone» и DCount («Телефон», «[WrkingFile]», «cLng (IndividualMatchID) =» & CLng ([IndividualMatchID]) и «AND cLng (ID) <=» & CLng ([ID])) Что именно мы делаем с критериями? ([IndividualMatchID]) & "AND cLng (ID) <=" & CLng ([ID])) –

ответ

1

Это может быть сделано в следующих шагах:

  1. Используйте функцию DCOUNT присвоить "PHONE1", " Phone2 "и т. Д. На поле.
  2. Используйте Pivot Query.

Чтобы использовать этот подход, вам необходимо убедиться, что в вашей таблице есть уникальный идентификатор. (Т.е. можно добавить поле «Autonumber», если есть уже не один)

Вот пример запроса на шаге 1

SELECT Table1.UniqueID, Table1.ID, Table1.Phone, 
"Phone" & DCount("Phone","Table1","ID=" & [ID] & " AND UniqueID<=" & [UniqueID]) AS row_id 
FROM Table1 
ORDER BY Table1.ID, Table1.Phone; 

Поскольку вы позже отметил, что все ваши поля являются текстовыми полями, вот запрос, который использует команду «CLng()», чтобы передать текст в длинное целое число.

Это даст вам результат, который выглядит следующим образом:

data before pivot

Теперь в шаге 2, row_id поле может быть повернута в столбцы. С помощью мастера сводной таблицы, чтобы помочь, или вот пример SQL:

TRANSFORM First(Query1.[Phone]) AS FirstOfPhone 
SELECT Query1.[ID] 
FROM Query1 
GROUP BY Query1.[ID] 
PIVOT Query1.[row_id]; 

Вот результат:

Final pivoted results

Выше была обобщена из post by Roger Carlson от Microsoft Access Community веб-сайта.

+0

Благодарим вас за отзыв. Это выполняется, но я получаю сообщение об ошибке в строке row_id. Думаю, b/c мой столбец в тексте, может быть, ошибка? См. Синтаксис ниже, если вы не против ... SELECT [WrkingFile] .ID, [Wrking File] .IndividualMatchID, [Wrking File].Телефон, «Телефон» и DCount («Телефон», «[WrkingFile]», «IndividualMatchID =» и [IndividualMatchID] и «AND ID <=» и [ID]) AS row_id FROM [Wrking File] ЗАКАЗАТЬ BY [WrkingFile]. [IndividualMatchID], [WrkingFile]. [Телефон]; –

+0

SELECT [WrkingFile] .ID, [WrkingFile] .IndividualMatchID, [WrkingFile]. Телефон, «Телефон» и DCount («Телефон», «[WrkingFile]», «IndividualMatchID =» и [IndividualMatchID] и «AND ID <= "& [ID]) AS row_id FROM [WrkingFile] ORDER BY [WrkingFile]. [IndividualMatchID], [WrkingFile]. [Телефон]; –

+0

Что говорит об ошибке? Код, который вы включили во второе сообщение, выглядит корректно: –

Смежные вопросы