FOR XML PATH возврат каретки для Excel - PullRequest
0 голосов
/ 10 января 2020

Я ищу вывод .csv из запроса SSMS (SQL Server 2014), который объединяет значения в одну ячейку для Excel. Приведенный ниже код ставит точку с запятой в качестве разделителя, но я хочу добавить возврат каретки для Excel, чтобы каждое значение находилось в отдельной строке внутри ячейки. (Прямо сейчас я делаю это вручную с помощью Excel поиска точки с запятой и заменяю на CHAR (10)). Как я могу изменить это ниже, чтобы получить строку с возвратом каретки в текстовом файле для Excel вместо точки с запятой? (Я унаследовал этот код, поэтому не могу его объяснить - я просто знаю, что он работает сейчас, но мне нужно его изменить.)


SELECT effworkruleid, 
       REPLACE(Stuff((SELECT ', ' + zonename 
              FROM   _pcr_Zones1 
              WHERE  effworkruleid = T.effworkruleid 
              FOR xml path('')), 1, 1, ''), ',', ';')
FROM   (SELECT DISTINCT effworkruleid 
        FROM   _pcr_Zones1) T 

1 Ответ

0 голосов
/ 10 января 2020

Как насчет следующих SQL ...

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (effworkruleid int, zonename VARCHAR(30));
INSERT   INTO @tbl (effworkruleid, zonename)
VALUES (333, 'g')
   ,(333 , 'f')
   ,(333 , 'y')
   ,(222 , 'x')
   ,(222 , 'y')
   ,(222 , 'z')
   ,(111 , 'E')
   ,(111 , 'F')
   ,(444 , 'L');
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = ','
    , @Lf CHAR(1) = CHAR(10);

SELECT DISTINCT c.effworkruleid
   , REPLACE(
        STUFF((SELECT CONCAT(@separator, CAST(zonename AS VARCHAR(30))) AS [text()]
        FROM @tbl AS O
        WHERE O.effworkruleid = C.effworkruleid 
        ORDER BY effworkruleid, zonename ASC
        FOR XML PATH('')), 1, 1, NULL), @separator, @Lf)
        AS zonename_List
FROM @tbl AS C;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...