Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом / 5 сообщений из 5, страница 1 из 1
05.10.2017, 11:19
    #39531314
SandraSidorova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом
Здравствуйте! В Экселе есть табличка "Приказы"

ключ Номер приказа ФИО11001Петров А.21001Иванов А.31001Буйнов А. 41002Буйнов А.51002Гудков А.


Нужно SQL запросом к данной таблице получить:
Номер приказа ФИО1001Петров А. Иванов А. Буйнов А.1002Буйнов А. Гудков А.

Макрос:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    Dim sCon$, cn As Object, rs As Object
    Dim finalRow&, lCount&, sSQL$
    Set cn = CreateObject("ADODB.Connection")
    cn.Mode = adModeReadWrite
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName _
             & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"


sSQL = "select * from ( " & _
"select  distinct [Номер приказа], " & _
  "stuff(( select ', ' + CAST( [ФИО]  AS VARCHAR) " & _
    " FROM [КС$B3:P12] " & _     ' [КС$B3:P12] адрес таблицы
    " where [Номер приказа] = t.[№ Приказа] " & _
   " order by [ФИО] " & _
   " for XML path('')" & _
   " ),1,1,'') lst " & _
" from [КС$B3:P12] t) as wwwo "

 Set rs = cn.Execute(sSQL) ' Ошибку выдает здесь
    lCount = UBound(rs.GetRows, 2) + 3

    With Лист1
        .Cells(7, 2).CopyFromRecordset cn.Execute(sSQL)
        finalRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Range(.Cells(lCount, 1), .Cells(finalRow, 1)).Clear
    End With
    
    


Когда эту строку запроса запускаю в mssql server2008 отрабатывает.


Если строку запроса заменить на простую выборку в экселе тоже отрабатывает нормально, типа :
Код: vbnet
1.
2.
sSQL = "SELECT * FROM [КС$B3:O12] " & _   [КС$B3:P12]
          "WHERE [Номер приказа]=1001 "



Почему не работает с объединением, не понимаю. Может кто-то сможет подсказать? Спасибо большое!
...
Рейтинг: 0 / 0
05.10.2017, 11:31
    #39531327
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом
SandraSidorova,

Не думаю, что stuff или for XML поддерживаются в ADODB. В вашем случае проще сделать кодом.
...
Рейтинг: 0 / 0
05.10.2017, 11:41
    #39531343
SandraSidorova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом
iMrTidy,

Спасибо, придется переделывать
...
Рейтинг: 0 / 0
05.10.2017, 11:45
    #39531347
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом
MS Jet SQL (он всё равно конечный обработчик, хоть и начально идёт обращение через ADO) в принципе не имеет средств для групповой конкатенации, ни прямых, вроде GROUP_CONCAT, ни косвенных, вроде FOR XML. Сделайте через VBA.
...
Рейтинг: 0 / 0
05.10.2017, 11:56
    #39531358
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом
Akina,

В случае ТС используется ACE, но Вы совершенно правы, я потом уж подумал, что ADODB сам по себе не движок))
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]