Объедините строки в SQL Server 2012 и разделите их запятыми или минусами. - PullRequest
0 голосов
/ 21 мая 2019

Я написал этот запрос:

SELECT ALL
    RTrim(ARTICO.CODICE) AS [Cod.Ricambio],
    RTrim(ARTICO.DESCR) AS Descrizione,
    RTrim(ARTCLA4.CODICE) AS [Modello Princ.],
    RTrim(ARTICO1.CODICE) AS [Cod.Compatib.]
FROM
    ARTICO
LEFT JOIN 
    ARTSOS ON ARTSOS.IDARTICO = ARTICO.ID
LEFT JOIN 
    ARTICO ARTICO1 ON ARTSOS.IDARTSOS = ARTICO1.ID
LEFT JOIN 
    ARTCLA4 ON ARTCLA4.ID = ARTICO.IDARTCLA4
WHERE
    ARTICO.IDLINEEP = 4

ARTICO.CODICE может иметь дубликаты, потому что даже если articla4.codice всегда одинаков (относится к artico.codice), artico1.codice может иметь несколько значений.

IE может быть таким

artico.codiceABC        articla4.codice001       artico1.codice001
artico.codiceABC        articla4.codice001       artico1.codice002
artico.codiceABC        articla4.codice001       artico1.codice003

, и результат, который я хотел бы получить, таков:

artico.codiceABC    articla4.codice001    artico.codice001,artico.codice002,artico.codice003

Ответы [ 2 ]

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

мой друг сказал мне одно решение, и это нормально, но, к сожалению, он оставил запятую как последний символ.Как я могу удалить это?

SELECT DISTINCT 
    RTrim(ARTICO.CODICE) AS [Cod.Ricambio],
    RTrim(ARTICO.DESCR) AS Descrizione,
    RTrim(ARTCLA4.CODICE) AS [Modello Princ.],
    (
SELECT  RTrim(ARTICO1.CODICE) + ','  AS 'data()' 
FROM
    ARTICO A
LEFT JOIN 
    ARTSOS ON ARTSOS.IDARTICO = ARTICO.ID
LEFT JOIN 
    ARTICO ARTICO1 ON ARTSOS.IDARTSOS = ARTICO1.ID
LEFT JOIN 
    ARTCLA4 ON ARTCLA4.ID = ARTICO.IDARTCLA4
WHERE
    ARTICO.IDLINEEP = 4 AND A.CODICE = ARTICO.CODICE 
 FOR XML PATH('') 
) AS [Cod.Compatib.]
FROM
    ARTICO
LEFT JOIN 
    ARTSOS ON ARTSOS.IDARTICO = ARTICO.ID
LEFT JOIN 
    ARTICO ARTICO1 ON ARTSOS.IDARTSOS = ARTICO1.ID
LEFT JOIN 
    ARTCLA4 ON ARTCLA4.ID = ARTICO.IDARTCLA4
WHERE
    ARTICO.IDLINEEP = 4
0 голосов
/ 21 мая 2019

Поскольку вы не используете SQL Server 2017 или более позднюю версию, мы можем попробовать использовать стандартный подход для имитации групповой конкатенации:

SELECT
    RTRIM(ARTICO.CODICE) AS [Cod.Ricambio],
    RTRIM(ARTICO.DESCR) AS Descrizione,
    RTRIM(ARTCLA4.CODICE) AS [Modello Princ.],
    [Cod.Compatib.] = STUFF((
        SELECT ',' + ARTICO1.CODICE
        FROM ARTICO ARTICO1
        WHERE ARTSOS.IDARTSOS = ARTICO1.ID
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM ARTICO
LEFT JOIN ARTSOS
     ON ARTSOS.IDARTICO = ARTICO.ID
LEFT JOIN ARTCLA4
    ON ARTCLA4.ID = ARTICO.IDARTCLA4
WHERE
    ARTICO.IDLINEEP = 4;
...