I have this query:
SELECT DISTINCT IM.EDIFICIOS_ID, TI.TITULAR
FROM IMPORTACION IM
INNER JOIN I_EDIFICIO IE ON IM.IMPORTACION_ID=IE.IMPORTACION_ID
INNER JOIN I_EDIFICIO_TITULAR ET ON IM.IMPORTACION_ID=ET.IMPORTACION_ID AND IE.EDIFICIO_ID=ET.EDIFICIO_ID
INNER JOIN I_TITULAR TI ON IM.IMPORTACION_ID=TI.IMPORTACION_ID AND ET.TITULAR_ID=TI.TITULAR_ID
WHERE TI.TITULAR IS NOT NULL AND TI.TITULAR<>''
ORDER BY IM.EDIFICIOS_ID, TI.TITULAR;
that returns this result set:
EDIFICIOS_ID TITULAR
------------ ------------------
1911 Ana María García
1911 Anselmo Piedrahita
1911 Manuel López
2594 Carlos Pérez
2594 Felisa García
6865 Carlos Pérez
6865 Felisa García
8428 Carlos Pérez
I want to concatenate the values from TITULAR for each EDIFICIOS_ID, so I get this:
EDIFICIOS_ID TITULAR
------------ ------------------
1911 Ana María García; Anselmo Piedrahita; Manuel López
2594 Carlos Pérez; Felisa García
6865 Carlos Pérez; Felisa García
8428 Carlos Pérez
I'm trying to use the FOR XML PATH trick. I've used it in the past but, since I can't really understand how it works, I can't figure out how to apply it to this specific case. Can you provide me with some ideas?
try something like this:
DECLARE @TableA table (EDIFICIOS_ID int, TITULAR nvarchar(500))
INSERT INTO @TableA VALUES (1911 ,'Ana María García')
INSERT INTO @TableA VALUES (1911 ,'Anselmo Piedrahita')
INSERT INTO @TableA VALUES (1911 ,'Manuel López')
INSERT INTO @TableA VALUES (2594 ,'Carlos Pérez')
INSERT INTO @TableA VALUES (2594 ,'Felisa García')
INSERT INTO @TableA VALUES (6865 ,'Carlos Pérez')
INSERT INTO @TableA VALUES (6865 ,'Felisa García')
INSERT INTO @TableA VALUES (8428 ,'Carlos Pérez')
;with ResutSet AS
(
SELECT EDIFICIOS_ID,TITULAR FROM @TableA
--replace with your query here and don't use @TableA
-- SELECT DISTINCT IM.EDIFICIOS_ID, TI.TITULAR
-- FROM IMPORTACION IM
-- INNER JOIN I_EDIFICIO IE ON IM.IMPORTACION_ID=IE.IMPORTACION_ID
-- INNER JOIN I_EDIFICIO_TITULAR ET ON IM.IMPORTACION_ID=ET.IMPORTACION_ID AND IE.EDIFICIO_ID=ET.EDIFICIO_ID
-- INNER JOIN I_TITULAR TI ON IM.IMPORTACION_ID=TI.IMPORTACION_ID AND ET.TITULAR_ID=TI.TITULAR_ID
-- WHERE TI.TITULAR IS NOT NULL AND TI.TITULAR<>''
-- ORDER BY IM.EDIFICIOS_ID, TI.TITULAR;
)
SELECT
c1.EDIFICIOS_ID
,STUFF(
(SELECT
'; ' + TITULAR
FROM ResutSet c2
WHERE c2.EDIFICIOS_ID=c1.EDIFICIOS_ID
ORDER BY c1.EDIFICIOS_ID, TITULAR
FOR XML PATH('')
)
,1,2, ''
) AS CombinedValue
FROM ResutSet c1
GROUP BY c1.EDIFICIOS_ID
ORDER BY c1.EDIFICIOS_ID
OUTPUT:
EDIFICIOS_ID CombinedValue
------------ ---------------------------------------------------
1911 Ana María García; Anselmo Piedrahita; Manuel López
2594 Carlos Pérez; Felisa García
6865 Carlos Pérez; Felisa García
8428 Carlos Pérez
(4 row(s) affected)