Zeilenbeschläge aus dieser Abfrage
-
22-09-2019 - |
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 dieses Ergebnissatz 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 aus dem Titel für jede edificios_id verkettet, also bekomme ich Folgendes:
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 das zu benutzen Für XML -Pfadtrick. Ich habe es in der Vergangenheit verwendet, aber da ich nicht wirklich verstehen kann, wie es funktioniert, kann ich nicht herausfinden, wie ich es auf diesen speziellen Fall anwenden soll. Können Sie mir einige Ideen zur Verfügung stellen?
Lösung
Probieren Sie so etwas aus:
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
AUSGANG:
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)
Andere Tipps
Dies scheint ähnlich zu sein wie diese Frage SO - Sie finden es möglicherweise nützlich, um Ihre Frage zu beantworten. Es geht speziell um MySQL, nicht SQL -Server, aber Sie überprüfen Sie es.
Bearbeiten:
Es sieht so aus, als müssten Sie möglicherweise Group_Concat für SQL Server - simulieren - Hier ist eine SO -Frage, in der das diskutiert wird.
Hoffe das hilft einigen.
Bearbeiten 2:
Aber das lässt mich fragen, warum Sie dies nicht nur in der Client -App und nicht über SQL tun. Es scheint, dass es unkompliziert genug ist, dies mit der abgerufenen Tabelle zu erreichen, die int -Werte dupliziert hat. Vielleicht könnte das ein Ansatz sein?
Dies ist nicht genau +, nach dem Sie suchen, aber es gibt einen anderen Weg auf MSSQL, Werte zu verkettet.
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