Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 45
Здравствуйте! В Экселе есть табличка "Приказы"

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



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


Макрос:
    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 отрабатывает.


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


Почему не работает с объединением, не понимаю. Может кто-то сможет подсказать? Спасибо большое!

К сообщению приложен файл. Размер - 5Kb
5 окт 17, 11:19    [20844608]     Ответить | Цитировать Сообщить модератору
 Re: Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом  [new]
iMrTidy
Member

Откуда:
Сообщений: 568
SandraSidorova,

Не думаю, что stuff или for XML поддерживаются в ADODB. В вашем случае проще сделать кодом.
5 окт 17, 11:31    [20844679]     Ответить | Цитировать Сообщить модератору
 Re: Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 45
iMrTidy,

Спасибо, придется переделывать
5 окт 17, 11:41    [20844752]     Ответить | Цитировать Сообщить модератору
 Re: Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16297
MS Jet SQL (он всё равно конечный обработчик, хоть и начально идёт обращение через ADO) в принципе не имеет средств для групповой конкатенации, ни прямых, вроде GROUP_CONCAT, ни косвенных, вроде FOR XML. Сделайте через VBA.
5 окт 17, 11:45    [20844767]     Ответить | Цитировать Сообщить модератору
 Re: Объединить данные из нескольких записей по номеру в ячейку Эксель. SQL запросом  [new]
iMrTidy
Member

Откуда:
Сообщений: 568
Akina,

В случае ТС используется ACE, но Вы совершенно правы, я потом уж подумал, что ADODB сам по себе не движок))
5 окт 17, 11:56    [20844840]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить