Возвращение разделенных запятыми значений в SQL Server в одном элементе - PullRequest
0 голосов
/ 10 января 2019

У меня есть запрос ниже, который я использую, чтобы вернуть результат через запятую.

SELECT STUFF
(
    (
        SELECT ',' + em.EMAIL 
        FROM(
            SELECT  DISTINCT USR.EMAIL AS EMAIL
          FROM PRNCPLS A, PRNCPLS B, USER_INFO USR,
          RELATIONSHIPS C
          WHERE A.ID = C.PARENTID 
          AND B.ID = C.CHILDID
          AND A.TYPE = 'USER' and B.TYPE = 'ROLE'
          AND A.ID = USR.ID
          and B.NAME = 'Approver'
          AND USR.EMAIL IS NOT NULL) em
        ORDER BY em.EMAIL FOR XML PATH('')
    ),
     1, 1, ''
) AS Output

У меня есть требование обновить этот запрос таким образом, чтобы первая строка оператора SQL (а не вывод) всегда начиналась следующим образом

SELECT EMAIL FROM

Это необходимо, поскольку используемый по какой-то причине инструмент ожидает FROM в первой строке и только один элемент в предложении SELECT. Мой запрос на самом деле возвращает только один элемент, поэтому я надеялся как-то его обновить.

Ожидаемый результат - abcd @ gmail.com, 1234 @ yahoo.com, xyz @ gmail.com

Любая помощь будет оценена.

Ответы [ 4 ]

0 голосов
/ 10 января 2019
SELECT EMAIL FROM (

SELECT STUFF
(
    (
        SELECT ',' + em.EMAIL 
        FROM(
            SELECT  DISTINCT USR.EMAIL AS EMAIL
          FROM PRNCPLS A, PRNCPLS B, USER_INFO USR,
          RELATIONSHIPS C
          WHERE A.ID = C.PARENTID 
          AND B.ID = C.CHILDID
          AND A.TYPE = 'USER' and B.TYPE = 'ROLE'
          AND A.ID = USR.ID
          and B.NAME = 'Approver'
          AND USR.EMAIL IS NOT NULL) em
        ORDER BY em.EMAIL FOR XML PATH('')
    ),
     1, 1, '') AS EMAIL
) AS Output

Остерегайтесь обоих "... EMAIL ...":

  • "ВЫБЕРИТЕ ПОЧТУ ..."
  • "... 1,1, '') AS EMAIL ...".
0 голосов
/ 10 января 2019

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

SELECT t.SomeColumn FROM
(
     place your existing SELECT here
) t;

Это не будет работать с запросом CTE, но CTE могут быть перенесены в сами подзапросы.

Подсказка : старайтесь избегать старомодных СОЕДИНЕНИЙ , если это возможно. В комментариях Сами есть хорошая ссылка ...

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

Вы пытались сделать

SELECT 'SELECT EMAIL FROM '
UNION
... Your existing query
0 голосов
/ 10 января 2019

вы пробовали

SELECT 'SELECT EMAIL FROM ' + STUFF
(
    (
        SELECT ',' + em.EMAIL 
        FROM(
            SELECT  DISTINCT USR.EMAIL AS EMAIL
          FROM PRNCPLS A, PRNCPLS B, USER_INFO USR,
          RELATIONSHIPS C
          WHERE A.ID = C.PARENTID 
          AND B.ID = C.CHILDID
          AND A.TYPE = 'USER' and B.TYPE = 'ROLE'
          AND A.ID = USR.ID
          and B.NAME = 'Approver'
          AND USR.EMAIL IS NOT NULL) em
        ORDER BY em.EMAIL FOR XML PATH('')
    ),
     1, 1, ''
) AS Output;

или есть еще способ форматирования данных?

...