2009-12-22 13 views
0

Здравствуйте, я имею дело с некоторыми недружественными импорта файлов, которые импортируют как:Объединение нескольких записей в одной таблице доступа

timestamp position  name 
001   2   Jon 
001   3   Bob 
001   1   Ann 
001   4   Mike 
002   1   Joe 
002   2   Sue 
003   1   Jeff 
004   5   James 
004   1   Andy 
004   2   Beth 
004   4   Mitch 
004   3   Chris 

И хотел бы создать новую таблицу, которая показывает таким образом:

timestamp position1 position2 position3 position4  position5 
001   Ann   Jon   Bob   Mike 
002   Joe   Sue 
003   Jeff 
004   Andy   Beth   Chris  Mitch  James 

просматривая этот форум ближе я пришел к решению является:

SELECT pos1.timestamp, pos1.name AS position1, pos2.name AS position2 
FROM table1 AS pos1 INNER JOIN table1 AS pos2 
ON pos1.timestamp = pos2.timestamp 
WHERE (((pos1.position)=1) AND ((pos2.position)=2)) 

Я не могу понять, как т o расширьте это до моих спецификаций, любая помощь очень ценится.

+0

Вы получили результ, которого хотели в конце? –

ответ

1

Try что-то вроде этого

TRANSFORM First(Table.[name]) AS FirstOfname 
SELECT Table.[timestamp] 
FROM [Table] 
GROUP BY Table.[timestamp] 
PIVOT Table.[position]; 

Я создал это с помощью мастера MS Access Cross Tab Query.

также посмотреть на

What is a CrossTab Query?

Некоторые лучше explenation.

  • Нажмите вкладку «Создать».
  • Нажмите «Мастер запросов».
  • Выберите второй вариант (запрос кросс-таблицы Wizard) и нажмите ОК.
  • Выберите таблицу для ввода и нажмите .
  • Выберите метку времени и щелкните по стрелке (одиночный), указав отлево вправо, и нажмите следующий.
  • Выберите позицию и нажмите следующий.
  • имя будет оставшимся полем, Выберите сначала (значение по умолчанию) и нажмите далее.
  • Хит конец.

Он должен был сохранить запрос Table_Crosstab (или что-то подобное). Щелкните правой кнопкой мыши и выберите дизайн. На кнопке просмотра выберите Sql View.

Вы должны увидеть что-то похожее на

TRANSFORM First(Table.name) AS FirstOfname 
SELECT Table.timestamp, First(Table.name) AS [Total Of name] 
FROM [Table] 
GROUP BY Table.timestamp 
PIVOT Table.position; 

Со второй линии удалить

, First(Table.name) AS [Total Of name] 

, так что вы в конечном итоге с

TRANSFORM First(Table.name) AS FirstOfname 
SELECT Table.timestamp 
FROM [Table] 
GROUP BY Table.timestamp 
PIVOT Table.position; 

И это должно быть. Сохраните, и вы готовы.

+0

Я не понимаю общих черт (начав сегодня доступ). Можете ли вы быть конкретными в отношении моей конкретной ситуации и что мне нужно сделать, чтобы получить желаемый результат. Спасибо. – cubew00t

+0

ОК, я добавил несколько шагов. Спросите, застряли ли вы. –

1

Ваш новый стол плохой дизайн. Что происходит, когда в поступающих данных присутствует шестой и седьмой человек? С трудом будет работать, когда вам нужно вытащить все данные определенным человеком, так как вам нужно будет запросить пять столбцов.

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