Как объединить содержимое 3 ячеек в одну в Excel или с помощью SQL - PullRequest
0 голосов
/ 02 августа 2010

У меня есть файл Excel CSV, который я загружаю в таблицу сервера sql с помощью sqlbulkcopy, данные в Excel выглядят такобъединить эти 3 строчных комментария в один?

Ответы [ 2 ]

0 голосов
/ 03 августа 2010

измените ваш запрос на что-то вроде этого:

set nocount on;
declare @t table (Ro_No nvarchar(5), Comments nvarchar(20), Amount decimal(5,2))
insert into @t (Ro_No, Comments, Amount)
select '121','**ABCDEFG**' , 1.38 union
select '121','**HIJKLMN**' , 1.38 union
select '121','**OPQRSTUV**', 1.38 union
select '221','aaa'         , 2.2 union
select '221','bbb'         , 2.2 union
select '321','test3a'      , 3.2 union
select '321','test3b'      , 3.2
set nocount off

SELECT p1.Ro_No
         ,stuff(
                   (SELECT
                        ', ' + p2.Comments
                        FROM @t p2
                        WHERE p2.Ro_No=p1.Ro_No
                        ORDER BY p2.Ro_No,p2.Comments
                        FOR XML PATH('') 
                   )
                   ,1,2, ''
               ) AS All_Comments
      ,p1.Amount
      FROM @t p1
     GROUP BY 
        Ro_No, Amount

ВЫХОД:

Ro_No All_Comments                              Amount
----- ----------------------------------------- ------
121   **ABCDEFG**, **HIJKLMN**, **OPQRSTUV**    1.38  
221   aaa, bbb                                  2.20  
321   test3a, test3b                            3.20  

(3 row(s) affected)                             
0 голосов
/ 02 августа 2010

Я, вероятно, сделал бы эту строку построчно в VBA:

Я бы инициализировал несколько переменных, таких как startRow, currentRow и lastRow

Я бы создал рекурсивную функцию, которая принимала бы номер строки, и он проверил бы, был ли первый столбец СЛЕДУЮЩИХ строк пустым ... если пусто, он вернул бы второй столбец текущих строк плюс вывод той же функции используя следующий номер строки. если не пусто, он вернет текущие строки второго столбца. Он также проверит, был ли достигнут счетчик lastRow.

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

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