объединения нескольких строк в одной строке в MS Access. Объединение строк access


ms-access - Объединение нескольких строк в одну строку в MS Access

Возможный дубликат: Объединить строки в Access 2007 Access 2007 - объединить поля из одного столбца в одной таблице в одно значение с запятой в другой таблице

В настоящее время у меня есть структура таблицы, которая примерно такая:

Имя --- Cat --- Desc --- Thresh --- Perc --- Err --- BP Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- ADC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 2 ----- BAC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- RBE2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 8 ----- VBE2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 6 ----- AEC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- PBC2 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 1 ----- XBC4 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- AEC2 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- PBC2 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 3 ----- ADC2 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- ADC2 Bob ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- BAC2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- Pbc2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- ZTM2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 2 ----- QYC2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- FLC2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 1 ----- KSC2 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- JYC2

То, что я хочу сделать, - это 1 строка за "Имя" и "Кошка", которая суммирует все "Err" (за "Name" и "Cat" ) и объединяет только "BP", полей в одну строку. Например:

Имя --- Cat --- Desc --- Thresh --- Perc --- Err --- BP Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ----- 16 ----- BAC2, VBE2, AEC2 Боб ------- C2 ------ Com ------ 8Per -------- 0.45 ------ 4 ------ XBC4, ADC2 Джо -------- ------- С1 Inf -------- -------- 7Per 0,05 ------ 3 ------ QYC2, KSC2

Были заданы одинаковые вопросы, но я не могу их применить, так как мои знания о сценариях VBA начинаются. Есть ли способ сделать все это через SQL? Если скрипт VBA является единственным вариантом (т.е. Созданием функции), любая помощь будет принята с большой благодарностью. Заранее благодарю вас.

Часть вопроса 2: Я создал функцию в соответствии с руководством Allen Browne. Модуль сохраняется как modConcatRelated. Теперь я попытался запустить этот запрос (я не уверен, что это правильный SQL, чтобы получить результат, который я ищу):

SELECT [Name], [Cat], [Desc], [Thresh], [Perc], sum([Err]), ConcatRelated("[BP]", "make_table_bp", "[Err] = " & [BP]) FROM make_table_bp GROUP BY [Name], [Cat], [Desc], [Thresh], [Perc], [Err], [BP];

Он сказал: "Ошибка 3061. Слишком мало параметров Ожидаемый 1." Также он сказал: Undefined Функция ConcatRelated. " Я ищу руководство по созданию правильной инструкции SQL, чтобы я мог правильно вызвать функцию ConcatRelated и дать результат, как показано выше. Еще раз спасибо.

Следующий вопрос: Что делать, если таблица имела уникальное поле даты, помеченное как последний столбец в таблице. Что-то вроде этого:

Имя --- Cat --- Desc --- Thresh --- Perc --- Err --- BP --- Дата

Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- ADC2--12/02/2011 Bob ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 2 ----- BAC2-- 09/05/2011 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- RBE2-- 11/02/2011 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 8 ----- VBE2-- 08/14/2012 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 6 ----- AEC2-- 02/25/2009 Bob ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- PBC2-- 07/02/2011 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 1 ----- XBC4--09/05/2011 Bob ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- AEC2-02/02/2010 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- PBC2--08/14/2012 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 3 ----- ADC2--05/05/2001 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- ADC2--08/02/2010 Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- BAC2--06/17/2010 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- Pbc2 --08/14/2012 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- ZTM2 --09/05/2011 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 2 ----- QYC2 --05/17/2010 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- FLC2 --3/19/2010 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 1 ----- KSC2 --09/05/2011 Джо -------- ------- С1 Inf --------- -------- 7Per 0,05 ------ 0 ----- JYC2 --08/14/2012

Скажем, я хотел построить запрос, чтобы сказать что-то вроде: покажите мне все записи еще в этом же формате:

Имя --- Cat --- Desc --- Thresh --- Perc --- Err --- BP Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ----- 16 ----- BAC2, VBE2, AEC2 Боб ------- C2 ------ Com ------ 8Per -------- 0.45 ------ 4 ------ XBC4, ADC2 Джо -------- ------- С1 Inf -------- -------- 7Per 0,05 ------ 3 ------ QYC2, KSC2

Но для диапазона дат 01/01/2009 по 09/31/2011

@HansUp вы могли бы помочь с этим?

qaru.site

Объединение текстовых значений с помощью выражений

Когда вы хотите объединить значения в двух и более полях в Access, создайте выражение с оператором амперсанд (&). Предположим, что у вас есть форма "Сотрудники". вы вводите в разные поля имя и фамилию каждого сотрудника, но хотите отображать полное имя сотрудника в заголовке формы.

Для этого используйте следующее выражение:

=[Имя] & " " & [Фамилия]

Выражение с оператором & объединяет значения из полей "Имя" и "Фамилия". В выражении также присутствует пара двойных кавычек (") с пробелом между ними, чтобы разделить пробелом имя и фамилию. Если вы хотите вставить что-то между двумя полями, например пробел, знаки препинания или текст, это дополнительное вставляемое значение необходимо заключить в кавычки.

В качестве еще одного примера рассмотрим следующее выражение, где имя и фамилия разделяются запятой и пробелом:

=[Имя] & ", " & [Фамилия]

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

В следующей процедуре предполагается, что у вас есть форма, которая основана на таблице с полями "Имя" и "Фамилия". Или же вы можете изменить выражение на шаге 6, чтобы оно соответствовало вашим данным.

Добавление текстового поля с выражением для полного имени

  1. В области навигации щелкните правой кнопкой мыши форму или отчет, которые вы хотите изменить, и выберите в контекстном меню команду Конструктор.

  2. На вкладке Конструктор в группе Элементы управления щелкните Поле.

  3. Перетащите указатель в форме или отчете, чтобы создать текстовое поле.

  4. Щелкните правой кнопкой мыши текстовое поле и выберите в контекстном меню пункт Свойства.

  5. В области свойств откройте вкладку Данные.

  6. Измените значение свойства Данные на =[Имя] & " " & [Фамилия].

  7. Закройте область свойств и сохраните изменения.

Иногда одно из полей, которые вы хотите объединить, может не содержать значения. Это отсутствие данных называется значением Null. Если вы примените оператор & к полю, которое не имеет значения, Access возвращает для данного поля пустую строку. Например, если в записи сотрудника есть только фамилия, выражение в предыдущем примере возвращает строку нулевой длины для поля "Имя", пробел, а затем значение в поле "Фамилия".

1. Так как в поле "Имя" нет данных, значению "Гладких" предшествуют строка нулевой длины и пробел.

При объединении значений из нескольких полей в новой строке желательно включать значение в новой строке (например, запятую), только если в определенном поле содержатся данные. Чтобы включать значение условно, объединяйте поля с помощью оператора +, а не оператора &. Предположим, что у вас есть таблица "Клиент" с полями "Город", "Регион" и "Почтовый индекс". Вы хотите объединить значения в этих полях для отчета, но некоторые записи могут не содержать значений в поле "Регион". Если вы попытаетесь объединить поля с помощью оператора &, вы получите ненужные запятые перед почтовым индексом.

Чтобы исключить ненужные запятые, воспользуйтесь оператором "плюс" (+), как показано в следующем примере выражения:

=([Город] & (", " + [Регион]) & " " & [ПочтовыйИндекс])

Оператор + объединяет текст таким же образом, как оператор &. Однако оператор + также поддерживает так называемое распространение значения Null. Распространение значения Null позволяет возвращать значение Null для всего выражения, если хотя бы один его компонент имеет значение Null. Рассмотрим в предыдущем примере часть выражения (", " + [Регион]). Так как используется оператор +, выражение во внутренних круглых скобках возвращает запятую только в том случае, поле "Регион" содержит значение. Если в поле "Регион" отсутствует значение, срабатывает распространение значения Null, после чего все выражение во внутренних круглых скобках возвращает значение Null, тем самым "скрывая" запятую.

1. Записи, которые включают значения для регионов, отображаются с запятой, пробелом и сокращенным названием региона.

2. Для Петрозаводска регион не указан, поэтому результирующее выражение отображается без запятой, пробела или сокращенного названия региона.

К началу страницы

support.office.com

access - объединения нескольких строк в одной строке в MS Access

Possible Duplicate:Combine rows in Access 2007Access 2007 - Concatenate fields from one column in one table into a single, comma delmited value in another table

В настоящее время у меня структуру таблицы, которая примерно так:

Имя --- Кошка --- Описание изделия - - Трэш --- Проц --- Err --- BPБоб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- ADC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 2 ----- BAC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- RBE2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 8 ----- VBE2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 6 ----- AEC2 Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- PBC2 Боб ------- C2 ------- Com ------ 8Per -------- 0,45 ------ 1 ----- XBC4 Bob ------- C2 ------- Com ------ 8Per -------- 0,45 ------ 0 ----- AEC2 Боб ------- C2 ------- Com ------ 8Per -------- 0,45 ------ 0 ----- PBC2 Bob ------- C2 ------- Com ------ 8Per -------- 0,45 ------ 3 ----- ADC2 Bob - ----- C2 ------- Com ------ 8Per -------- 0,45 ------ 0 ----- ADC2 Bob ---- --- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- BAC2 Joe ------ --C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- PBC2 Joe ---- ---- C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- ZTM2 Joe-- ------ C1 ------- Inf --------- 7Per -------- 0.05 ------ 2 ----- QYC2 Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- FLC2 Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ------ 1 ----- KSC2 Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 --- --JYC2

То, что я хочу сделать, это иметь 1 строку на «имя» и «кошку», которая суммирует все «Err» (по «Name» и «Cat») и объединяется только поля «BP» в одну строку. Такие, как:

Имя --- Cat --- Desc --- Трэш --- Проц --- Err --- BPБоб - ------ C1 ------- Inf -------- 7Per -------- 0.05 ----- 16 ----- BAC2, VBE2, AEC2 Bob ------- C2 ------ Com ------ 8Per -------- 0.45 ------ 4 ------ XBC4, ADC2 Joe -------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 3 ------ QYC2, KSC2

Были заданы аналогичные вопросы, но я не могу их применить, поскольку мои знания о сценариях VBA начинаются. Есть ли способ сделать все это через SQL? Если скрипт VBA является единственным вариантом (т. Е. Созданием функции), любая помощь будет принята с большой благодарностью. Заранее спасибо.

Вопрос часть

stackoverrun.com

sql - MS Access: запрос для объединения строк

У меня 3 таблицы:

  • клиенты
  • User_Defined_Definitions
  • User_Defined_Data

Таблица " Clients содержит базовую информацию:

ClientID, Name, Address...

В User_Defined_Definitions есть заголовок для полей user def:

StartDate, SalesRep, Website...

Затем таблица User_Defined_Data содержит данные для заполнения этих полей для каждого клиента в таблице клиентов.

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

ClientID Name Address Description Data 155555 Calvin 123 Fake St StartDate 10/10/2013 155555 Calvin 123 Fake St SalesRep Tom 155555 Calvin 123 Fake St Website http://www.fakesite.com 155556 Steve 456 Root Rd StartDate 8/5/2013 155557 Kathy 715 Main St StartDate 5/5/2010 155557 Kathy 715 Main St SalesRep Jessica 155557 Kathy 715 Main St Website http://www.fakesite2.com 155558 Jenny 345 Fake St StartDate 9/9/2012 155558 Jenny 345 Fake St Website http://www.fakesite3.com

Первые три столбца поступают из таблицы Client. Столбец Description находится из таблицы User_Defined_Definitions. И Data поступают из таблицы User_Defined_Data.

И я бы хотел, чтобы это было похоже на это

ClientID Name Address StartDate SalesRep Website 155555 Calvin 123 Fake St 10/10/2013 Tom http://www.fakesite.com 155556 Steve 456 Root Rd 8/5/2013 155557 Kathy 715 Main St 5/5/2010 Jessica http://www.fakesite2.com 155558 Jenny 345 Fake St 9/9/2012 http://www.fakesite3.com

Я знаю, что это возможно, используя sql, но я как раз обычно писал сценарии для обработки данных после экспорта. Но на этот раз мне нужно сделать это в Access, чтобы таблица могла быть снова открыта через 2 месяца, и она будет повторно запрашивать данные таким же образом.

Дайте мне знать, если что-нибудь еще, что я могу предоставить, чтобы помочь получить правильный результат.

ДОБАВИТЬ

Я проделал длинный путь и сделал индивидуальные запросы для каждого из UDF, а затем объединил их, выполнив запрос снова, чтобы каждый из них помещал их в одну строку. Мне все еще интересно, как это сделать с SQL, потому что сейчас я нахожусь в процессе изменения CRM и программного обеспечения учета для своей организации, и это становится сложной задачей.

Здесь запрос, который я использовал, чтобы вытащить UDF на отдельные строки, как описано выше.

SELECT dbo_AMGR_Client_Tbl.Client_Id, dbo_AMGR_Client_Tbl.Name, dbo_AMGR_Client_Tbl.Address_Line_1, dbo_AMGR_Client_Tbl.Address_Line_2, dbo_AMGR_Client_Tbl.City, dbo_AMGR_Client_Tbl.State_Province, dbo_AMGR_Client_Tbl.Zip_Code, dbo_AMGR_User_Field_Defs_Tbl.Description, dbo_AMGR_User_Fields_Tbl.DateCol, dbo_AMGR_User_Fields_Tbl.NumericCol, dbo_AMGR_User_Fields_Tbl.AlphaNumericCol FROM dbo_AMGR_User_Field_Defs_Tbl INNER JOIN (dbo_AMGR_Client_Tbl INNER JOIN dbo_AMGR_User_Fields_Tbl ON dbo_AMGR_Client_Tbl.Client_Id = dbo_AMGR_User_Fields_Tbl.Client_Id) ON (dbo_AMGR_User_Field_Defs_Tbl.Type_Id = dbo_AMGR_User_Fields_Tbl.Type_Id) AND (dbo_AMGR_User_Field_Defs_Tbl.Code_Id = dbo_AMGR_User_Fields_Tbl.Code_Id) GROUP BY dbo_AMGR_Client_Tbl.Name_Type, dbo_AMGR_Client_Tbl.Client_Id, dbo_AMGR_Client_Tbl.Name, dbo_AMGR_Client_Tbl.Address_Line_1, dbo_AMGR_Client_Tbl.Address_Line_2, dbo_AMGR_Client_Tbl.City, dbo_AMGR_Client_Tbl.State_Province, dbo_AMGR_Client_Tbl.Zip_Code, dbo_AMGR_User_Field_Defs_Tbl.Description, dbo_AMGR_User_Fields_Tbl.DateCol, dbo_AMGR_User_Fields_Tbl.NumericCol, dbo_AMGR_User_Fields_Tbl.AlphaNumericCol HAVING (((dbo_AMGR_Client_Tbl.Name_Type)="C") AND ((dbo_AMGR_Client_Tbl.Name) Not Like "*HOUSE*")) ORDER BY dbo_AMGR_Client_Tbl.Name;

qaru.site

sql - MS Access: объединение трех таблиц и уникальных строк

У меня есть 2 таблицы:

Таблица 1

|ID |Total |Name | |1 |100 |Car | |2 |200 |House| |6 |600 |Car |

а также

Таблица 2

|ID |Total |Type | |1 |200 |A | |1 |300 |B | |3 |100 |A | |3 |150 |B | |4 |400 |A | |5 |500 |B | |6 |700 |A |

В основном я хочу создать запрос для объединения всех идентификаторов в один результат. Я знаю, что есть 2 таблицы, но один тип результата требует объединения трех таблиц.

Результат должен быть:

|ID|Total |Total A|Total B|Name | |1 |100 |200 |300 |Car | - IDs from all tables |2 |200 |- |- |House| - ID from table1 |3 |- |100 |150 |- | - IDs from table2 |4 |- |400 |- |- | - ID from table2(type A) |5 |- |- |500 |- | - ID from table2(type B) |6 |600 |700 |- |Dog | - ID from table1 and table2(type A)

Это тривиальный пример: в таблице 2 могут быть одинаковые строки, которым нужна группа. Также есть длинная фраза where, так что производительность очень низкая. Все ID в результате должны быть уникальными. Этот запрос выполняется при нажатии кнопки в форме. Возможно ли создать такой запрос? Может быть, я должен создать некоторую таблицу temp раньше или что-то, чтобы упростить запрос? Или, может быть, моя структура данных таблиц неверна?

Новые дополнительные данные:

Таблица 1

|ID |Total |Name | |1 |100 |Car | |2 |200 |House| |6 |600 |Car | |1 |400 |House|

В таблице 1 может быть несколько одинаковых строк идентификатора. Также имя столбца указывает знак столбца "Всего" (отрицательный или положительный). Допустим, что значение "Автомобиль" отрицательное, а "Дом" - положительное.

Таким образом, результат должен быть:

|ID|Total |Total A|Total B| |1 |300 |200 |300 |2 |200 |- |- |3 |- |100 |150 |4 |- |400 |- |5 |- |- |500 |6 |-600 |700 |-

Таким образом, мы видим, что ID = 1 Итого = 400-100 и ID = 6 Всего = -600 из-за имени столбца "Значение". Моя проблема в том, что если я выберу Table1.Name для запроса, я получу две одинаковые строки ID (ID = 1): S Можно ли создать такой запрос так просто?

qaru.site