1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
-- Création table de test
CREATE TABLE dbo.nomAdresse
(
Nom varchar(10) NOT NULL,
Adresse varchar(50) NOT NULL
)
GO
-- Insertion des enregistrements
INSERT INTO dbo.nomAdresse (Nom,Adresse) VALUES ('Alain','1 Rue ...');
INSERT INTO dbo.nomAdresse (Nom,Adresse) VALUES ('Aline','2 Rue ...');
INSERT INTO dbo.nomAdresse (Nom,Adresse) VALUES ('Fabien','1=3 Rue ...');
-- Concaténation de chaînes à l'aide des CTE
WITH tableEtPosition(position,nom,adresse)
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY Nom,Adresse),Nom,Adresse
FROM dbo.nomAdresse
)
,
phrases (position,phrase,phraseAdresse)
AS
(
SELECT position,CAST(nom AS VARCHAR(MAX)), CAST(Adresse AS VARCHAR(MAX))
FROM tableEtPosition
WHERE position = 1
UNION ALL
SELECT t.position,CAST(phrase + ',' + t.nom AS VARCHAR(MAX)), CAST(phraseAdresse + ',' + t.adresse AS VARCHAR(MAX))
FROM tableEtPosition t
INNER JOIN phrases p
ON t.position = p.position + 1
)
,
maxphrase
AS
(
SELECT MAX(position) AS maxposition
FROM phrases
)
SELECT p.phrase, p.phraseAdresse
FROM phrases p
INNER JOIN maxphrase m
ON p.position = m.maxposition; |
Partager