Несколько строк в одну строку, без функции / VBA [дубликат]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

21
задан reggie 1 April 2011 в 19:19
поделиться

4 ответа

Вам нужна функция для выполнения конкатенации.

Microsoft Access конденсирует несколько строк в таблице

Пример использования ваших данных:

Select T.ColumnA
  , GetList("Select ColumnB From Table1 As T1 Where T1.ColumnA = " & [T].[ColumnA],"",", ") AS ColumnBItems
From Table1 AS T
Group By T.ColumnA;
20
ответ дан Community 25 August 2018 в 11:08
поделиться

Вот отличная ссылка re: как это сделать из SQL, вызывая функцию. Инструкции являются исключительно четкими и, функция написана для вас, поэтому вы можете просто скопировать, вставить & amp; идти. Даже тот, кто не знает VB, может легко реализовать его: Объединить значения из связанных записей

5
ответ дан Deborah Cole 25 August 2018 в 11:08
поделиться

это может быть очень трудно получить. Если вы ДОЛЖНЫ сделать это в запросе, а не в функции, проблема, с которой вы столкнетесь, - это предел количества строк, которые вы можете объединить в один столбец. Пока единственный способ, который я нашел для этого, - через инструкции iif.

SELECT 
test1.ColumnA AS ColumnA, 
First([test1].[ColumnB]) & IIf(Count([test1].[ColumnB])>1,"," & Last([test1].[ColumnB])) AS ColumnB
FROM test1
GROUP BY test1.ColumnA;

возвращает:

ColumnA  ColumnB 
1      abc,xyz 
2      efg,hij 
3      asd

Это вернет только первое и последнее, но Я уверен, что с небольшой работой вы могли бы выработать функцию «Выбрать», но, как я уже сказал, вам придется добавить несколько инструкций iif для каждого дополнительного элемента, который вы хотите добавить, следовательно, ограничение.

2
ответ дан Patrick 25 August 2018 в 11:08
поделиться

В таблице может быть столбец последовательностей, который дает ему уникальный первичный ключ последовательности ColumnA:

table: t1
ColumnA sequence ColumnB
1       1        abc
1       2        pqr
1       3        xyz
2       1        efg
2       2        hij
3       1        asd

И может быть создан Crosstab:

query: x1
TRANSFORM Min([columnB] & ", ") AS Expr1
SELECT t1.columnA
FROM t1
GROUP BY t1.columnA
PIVOT t1.sequence;

columnA 1    2    3
1       abc, pqr, xyz,
2       efg, hij,
3       asd,

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

SELECT x1.columnA, Left([1] & [2] & [3],Len([1] & [2] & [3])-2) AS columnB FROM x1;

columnA columnB
1       abc, pqr, xyz
2       efg, hij
3       asd

Чтобы автоматизировать заполнение последовательности, можно использовать следующий код VBA:

Sub fill_sequence_t1()
  Dim i: i = 1
  Do While DCount("*", "t1", "sequence IS NULL") > 0
    DoCmd.RunSQL "SELECT t1.columnA, Min(t1.columnB) AS columnB_min INTO t2" & _
                 " FROM t1 WHERE t1.sequence IS NULL GROUP BY t1.columnA;"
    DoCmd.RunSQL "UPDATE t1 INNER JOIN t2 ON (t1.columnA = t2.columnA)" & _
                 " AND (t1.columnB = t2.columnB_min) SET t1.sequence=" & i
    CurrentDb.TableDefs.Delete "t2"
    i = i + 1
  Loop
End Sub
0
ответ дан Will 25 August 2018 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: