Есть ли способ получить все результаты по моему коду в 1 строку вместо нескольких строк? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь получить результаты по 1 строке вместо нескольких строк.

Я новичок в SQL и не уверен, что еще делать.

SELECT
  I.D1NAME,
  S.MEMBER_NBR,
  s.SHARE_NBR
FROM ID.MonthEnd_DL_Load_Dates EOM
JOIN SHARE S ON
  EOM.month_end_date = S.DL_LOAD_DATE AND
  COALESCE(S.CLOSED,0) = 0 AND
  DATEDIFF(DAY,S.LAST_CUST_CONT_DATE,MONTH_END_DATE) > 365
JOIN MEMBERSHIPPARTICIPANT MP ON
  S.DL_LOAD_DATE = MP.DL_LOAD_DATE AND
  S.MEMBER_NBR = MP.MEMBER_NBR
JOIN INDIVIDUAL I ON
  MP.DL_LOAD_DATE = I.DL_LOAD_DATE AND
  MP.INDIVIDUAL_ID = I.INDIVIDUAL_ID
WHERE EOM.sequence = 1

Я получаю:

Rob 1234 1
Rob 1234 2

Хотелось бы получить:

Rob 1234 1,2

1 Ответ

0 голосов
/ 04 мая 2019

FOR SQL SERVER 2008 - 2016

Этот обходной путь использует XML PATH и STUFF для объединения нескольких строк одной переменной в один ряд объединенных значений.Это решение имитирует STRING_AGG из SQL SERVER 2017.

Я продемонстрирую использование базы данных AdventureWorks и следующий запрос:

SELECT SOH.SalesOrderID
      ,STUFF
        (
            (
                SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]
                FROM AdventureWorks2016.Sales.SalesOrderDetail AS SOD
                WHERE SOH.SalesOrderID = SOD.SalesOrderID
                ORDER BY SOD.SalesOrderDetailID
                FOR XML PATH('')
            ), 1, 1, NULL
        ) AS ProductIDs
 FROM AdventureWorks2016.Sales.SalesOrderHeader AS SOH

Пример вывода:

SalesOrderID    ProductIDs
51176    796, 872
51177    970, 708
51178    779, 871, 870
51179    795, 933, 922, 879
51180    793, 872, 870, 707, 714
51181    792, 922, 933, 707

ПУТЬ XMLобъединяет вместе, возвращая значения в виде текстовых узлов.STUFF исключает запятую.Оператор SELECT объединит собранные текстовые узлы и разделит результаты, используя следующую строку:

SELECT ', ' + CAST(SOD.ProductID AS VARCHAR(20)) AS [text()]

PITFALL: Обязательно приведите ваш SHARE_NBR как VARCHAR (или NVARCHAR), поскольку он не будет работать счисловые типы данных, поскольку XML PATH возвращает данные текстового типа.

...