Любой способ удалить дубликаты на этот запрос "Для пути XML"? - PullRequest
0 голосов
/ 28 февраля 2019

У меня следующий запрос:

SELECT
    p.ID,
    p.DESCRIPTION,
    STUFF((SELECT '; ' + col.CUST_ORDER_ID 
           FROM CUST_ORDER_LINE col
           WHERE col.PART_ID = p.ID 
           ORDER BY col.CUST_ORDER_ID 
           FOR XML PATH('')), 1, 1, '') [Customer Orders],
    STUFF((SELECT '; ' + ql.QUOTE_ID  
           FROM QUOTE_LINE ql
           WHERE ql.PART_ID = p.ID 
           ORDER BY ql.QUOTE_ID 
           FOR XML PATH('')), 1, 1, '') As Quotes
FROM
    PART p
GROUP BY
    p.ID, p.DESCRIPTION

Я получаю много дубликатов "Заказы клиентов".Я попытался добавить «DISTINCT», то есть «Stuff ((Выберите DISTINCT», но я получаю ошибку «Элементы ORDER BY должны появиться в списке выбора, если указано SELECT DISTINCT». В выражении уже есть «Order By col.CUST_ORDER_ID», так чтоНаверное, я не понимаю. Может ли кто-нибудь дать мне предложение и, возможно, объяснение? Использование SQL Server 2012.

1 Ответ

0 голосов
/ 06 марта 2019
Select p.ID,
  p.DESCRIPTION,
  Stuff((Select distinct '; ' + col.CUST_ORDER_ID From CUST_ORDER_LINE col
  Where col.PART_ID = p.ID Order By '; ' + col.CUST_ORDER_ID For Xml Path('')), 1, 1,
  '') [Customer Orders],
  Stuff((Select distinct  '; ' + ql.QUOTE_ID From QUOTE_LINE ql
  Where ql.PART_ID = p.ID Order By '; ' + ql.QUOTE_ID For Xml Path('')), 1, 1,
  '') As Quotes
From PART p
Group By p.ID,
  p.DESCRIPTION

Упрощенное использование ';' + использование в порядке по столбцу с отличным clause.order по столбцу и данные выбранного столбца должны быть одинаковыми.

...