Row Concat aus dieser Frage

Ich habe diese Frage:

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; 

das gibt diese Ergebnismenge zurück:

 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 

Ich möchte die Werte von TITULAR für jede EDIFICIOS_ID verketten, also bekomme ich das:

 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 

Ich versuche, den FOR XML PATH Trick zu benutzen. Ich habe es in der Vergangenheit benutzt, aber da kann ich nicht wirklich verstehen, wie es funktioniert, kann ich nicht herausfinden, wie man es auf diesen speziellen Fall anwendet. Kannst du mir ein paar Ideen geben?

Versuche so etwas:

 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 

AUSGABE:

 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) 

Dies scheint ähnlich wie diese Frage auf SO – Sie könnten es nützlich finden, wenn Sie Ihre Frage beantworten. Es ist speziell über MySQL nicht SQL server, aber trotzdem, check it out.


Bearbeiten:

Es sieht so aus, als müsst du grupp_concat für SQL server simulieren – hier ist eine SO-Frage, die das bespricht .

Hoffe, das hilft einigen.


Bearbeiten 2:

Aber das macht mich fragen, warum du das nicht einfach machst auf der Client-App und nicht per SQL. Es scheint, es wäre einfach genug, um dies mit dem abgerufenen Tisch zu erreichen, der int-Werte dupliziert hat. Vielleicht könnte das ein Ansatz sein?

Dies ist nicht genau + wer suchst du, aber es gibt einen anderen path auf MSSQL, um Werte zu verketten.

  SELECT DISTINCT 1 AS TAG, NULL AS PARENT, EDIFICIOS_ID AS [EDIFICIOS!1!EDIFICIOS_ID], NULL AS [EDIFICIOS!1!TITULAR!IDREFS] FROM @TABLEA UNION ALL SELECT DISTINCT 1 AS TAG, NULL AS PARENT, EDIFICIOS_ID AS [EDIFICIOS!1!EDIFICIOS_ID], TITULAR+';' AS [EDIFICIOS!1!TITULAR!IDREFS] FROM @TABLEA ORDER BY [EDIFICIOS!1!EDIFICIOS_ID] FOR XML EXPLICIT