2015-07-06 3 views
-1

Я пытаюсь сделать расчет в MS Access, который использует значения предыдущих периодов. Мой подход состоит в том, чтобы создать второе поле для каждой переменной, с которой я работаю, и сдвинуть таблицу.Как я могу сместить и дублировать строки в MS Access?

Если мой QRY1 запрос:

aa bb cc 
--- --- --- 
12 34 56 
78 91 01 

Мой результат должен быть:

aa0 bb0 cc0 aa1 bb1 cc1 
---- ---- ---- ---- ---- ---- 
12 34 56 NULL NULL NULL 
78 91 01 12 34 56 
NULL NULL NULL 78 91 01 

Я сталкиваясь с двумя проблемами:

  1. Я попытался добавить пустые строки сверху и внизу в двух дополнительных запросах и как-то строки теряются.
  2. Когда я совмещаю эти два запроса с помощью JOIN, я получаю декартово произведение, т. Е. Строки не находятся рядом друг с другом.
+0

У вас должен быть сортируемый уникальный ключ. Если нет, вы не можете определить «предыдущую» запись. – Gustav

+0

qry1 сортируется по определенным критериям, поэтому мне нужно добавить ключ к обеим сторонам? – ahb1

+0

Не, если эти критерии уникальны. – Gustav

ответ

0

Вы пытаетесь использовать доступ к Ms, как если бы вы использовали Excel. Возможно, вам будет проще делать то, что вы хотите, используя формулы макроса Excel Excel.

Мощность доступа заключается в том, что это система SQL (именно поэтому вы получаете декартово произведение, когда вы присоединяетесь к этой идее), это звучит так, как будто вы хотите легко справиться с плоской электронной таблицей. Вы можете написать VBA для добавления строк для вас, если хотите автоматизировать эту часть.

Если это не поможет, то, возможно, более подробно расскажите, чего вы на самом деле хотите достичь.

EDIT:

я пропустил часть в вашем посте, где вы сказали, что вы делаете вычисления, используя прежние значения. Это, как я бы добиться этого в рамках одного запроса доступа:

qry_Data: (based on tbl_Data) 

    id aa bb cc calc 
    --- --- --- --- --- 
    01 12 34 56 =Dlookup("aa","tbl_Data","id = " & [id] - 1) 
    02 78 91 01 =Dlookup("aa","tbl_Data","id = " & [id] - 1) 

Вы не должны добавлять столбцы в таблицу как часть нормальной работы. Таблицы доступа должны быть настроены для хранения всех данных, которые им когда-либо понадобятся (пока ваша модель не изменится). Если вы создаете операцию в доступе, и кажется, что она должна добавлять столбцы, тогда вы должны добавить связанную таблицу или использовать вычисленное поле. В приведенном выше примере полевое вычисление будет равно значению «aa» из записи с идентификатором № 1, меньшим, чем текущая запись. Это будет работать только в том случае, если есть запись с этим ID #, поэтому, если есть вероятность наличия пробела в идентификационных номерах, вы не должны использовать этот точный метод. Поскольку вы сказали, что таблица сортируется по определенной критике, вам может потребоваться использовать другой метод для определения предыдущей записи. Один из способов сделать это в VBA будет выглядеть так:

Dim RS as Recordset 
Set RS = CurrentDB.QueryDefs("myQuery") 
RS.MoveLast 
RS.MovePrevious 

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

RS.Fields("aa") 

Не зная точно то, что вы пытаетесь сделать, я не могу сделать никаких конкретных рекомендаций, кроме того, если вы познакомитесь с базовыми концепциями SQL, и вы найдете работу в Access намного проще.

+0

Спасибо, Генри, это в значительной степени описывает это. Причина, по которой я хотел пойти по этому пути, заключалась в том, чтобы использовать некоторые мои результаты из этой таблицы в другом запросе. Пребывание в Access имело бы ряд преимуществ, но с этим трудно справиться. – ahb1

+0

У вас есть несколько вариантов. Вы можете связать таблицу Excel с тем, чтобы Access использовал ее в качестве таблицы, а затем выполнял свою работу с помощью VBA для управления данными в excel, но на самом деле может быть лучше переосмыслить, как вы идете по тому, что вы пытаетесь делать. Вы должны думать, что таблица доступа больше похожа на набор записей, которые содержат определенные данные, чем таблицы. «Вниз» и «справа» - это только понятия, которые имеют смысл, когда данные отображаются в таблице данных и сортируются в определенном порядке. Вы описали операцию добавления новых полей в таблицу. –

+0

Я обновил свой ответ еще несколькими идеями о том, как это сделать. –

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