Si tu es sur SQL2005, crées une fonction d'agrégation CLR, il y a plein d'ex sur le NET
BR
"Dolten Altgor" wrote in message news:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1 --------
id mc -- --- 1 pomme 1 poire 1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous les mc pour un id donné de manière à avoir ceci:
table_2 --------
id mc -- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le faire avec access une requete update du type:
UPDATE table_2 SET mc = table2.mc' ' | ' + table_1..mc FROM table_1 INNER JOIN table_2 ON table_1.id = table_1.id
Mais avec sql server cela ne marche pas... Merci!
brouardf
C'est parfaitement possible en une seule requête sans fonctions avec une requête récursive introduite par la CTE. A ce sujet, lire l'article que j'ai publié, il y a plusieurs exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme') INSERT INTO table_1 VALUES (1, 'poire') INSERT INTO table_1 VALUES (1, 'banane') INSERT INTO table_1 VALUES (2, 'prune') INSERT INTO table_1 VALUES (2, 'banane')
WITH T1 AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N, COUNT(*) OVER(PARTITION BY id) AS C FROM table_1), T2 AS (SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots FROM T1 WHERE N = 1 UNION ALL SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc FROM T1 INNER JOIN T2 ON T2.N + 1 = T1.N AND T1.id = T2.id) SELECT id, mots FROM T2 WHERE N = C
id mots ----------- ---------------------------- 2 banane, prune 1 banane, poire, pomme
A + __________________ Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL. Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/ Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation * * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1 --------
id mc -- --- 1 pomme 1 poire 1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous l es mc pour un id donné de manière à avoir ceci:
table_2 --------
id mc -- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le fair e avec access une requete update du type:
UPDATE table_2 SET mc = table2.mc' ' | ' + table_1..mc FROM table_1 INNER JOIN table_2 ON table_1.id = table_1.id
Mais avec sql server cela ne marche pas... Merci!
C'est parfaitement possible en une seule requête sans fonctions avec
une requête récursive introduite par la CTE.
A ce sujet, lire l'article que j'ai publié, il y a plusieurs
exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme')
INSERT INTO table_1 VALUES (1, 'poire')
INSERT INTO table_1 VALUES (1, 'banane')
INSERT INTO table_1 VALUES (2, 'prune')
INSERT INTO table_1 VALUES (2, 'banane')
WITH
T1 AS
(SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N,
COUNT(*) OVER(PARTITION BY id) AS C
FROM table_1),
T2 AS
(SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots
FROM T1
WHERE N = 1
UNION ALL
SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc
FROM T1
INNER JOIN T2
ON T2.N + 1 = T1.N
AND T1.id = T2.id)
SELECT id, mots
FROM T2
WHERE N = C
id mots
----------- ----------------------------
2 banane, prune
1 banane, poire, pomme
A +
__________________
Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" <dol...@xxx.com> wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1
--------
id mc
-- ---
1 pomme
1 poire
1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous l es mc
pour un id donné de manière à avoir ceci:
table_2
--------
id mc
-- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le fair e avec
access une requete update du type:
UPDATE table_2
SET mc = table2.mc' ' | ' + table_1..mc
FROM table_1 INNER JOIN
table_2 ON table_1.id = table_1.id
C'est parfaitement possible en une seule requête sans fonctions avec une requête récursive introduite par la CTE. A ce sujet, lire l'article que j'ai publié, il y a plusieurs exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme') INSERT INTO table_1 VALUES (1, 'poire') INSERT INTO table_1 VALUES (1, 'banane') INSERT INTO table_1 VALUES (2, 'prune') INSERT INTO table_1 VALUES (2, 'banane')
WITH T1 AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N, COUNT(*) OVER(PARTITION BY id) AS C FROM table_1), T2 AS (SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots FROM T1 WHERE N = 1 UNION ALL SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc FROM T1 INNER JOIN T2 ON T2.N + 1 = T1.N AND T1.id = T2.id) SELECT id, mots FROM T2 WHERE N = C
id mots ----------- ---------------------------- 2 banane, prune 1 banane, poire, pomme
A + __________________ Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL. Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/ Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation * * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1 --------
id mc -- --- 1 pomme 1 poire 1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous l es mc pour un id donné de manière à avoir ceci:
table_2 --------
id mc -- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le fair e avec access une requete update du type:
UPDATE table_2 SET mc = table2.mc' ' | ' + table_1..mc FROM table_1 INNER JOIN table_2 ON table_1.id = table_1.id
Mais avec sql server cela ne marche pas... Merci!
Dolten Altgor
merci!
a écrit dans le message de news:
C'est parfaitement possible en une seule requête sans fonctions avec une requête récursive introduite par la CTE. A ce sujet, lire l'article que j'ai publié, il y a plusieurs exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme') INSERT INTO table_1 VALUES (1, 'poire') INSERT INTO table_1 VALUES (1, 'banane') INSERT INTO table_1 VALUES (2, 'prune') INSERT INTO table_1 VALUES (2, 'banane')
WITH T1 AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N, COUNT(*) OVER(PARTITION BY id) AS C FROM table_1), T2 AS (SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots FROM T1 WHERE N = 1 UNION ALL SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc FROM T1 INNER JOIN T2 ON T2.N + 1 = T1.N AND T1.id = T2.id) SELECT id, mots FROM T2 WHERE N = C
id mots ----------- ---------------------------- 2 banane, prune 1 banane, poire, pomme
A + __________________ Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL. Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/ Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation * * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1 --------
id mc -- --- 1 pomme 1 poire 1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous les mc pour un id donné de manière à avoir ceci:
table_2 --------
id mc -- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le faire avec access une requete update du type:
UPDATE table_2 SET mc = table2.mc' ' | ' + table_1..mc FROM table_1 INNER JOIN table_2 ON table_1.id = table_1.id
Mais avec sql server cela ne marche pas... Merci!
merci!
<brouardf@club-internet.fr> a écrit dans le message de news:
b1e49b2d-e897-4708-bca3-09b29eeb2e41@e1g2000pra.googlegroups.com...
C'est parfaitement possible en une seule requête sans fonctions avec
une requête récursive introduite par la CTE.
A ce sujet, lire l'article que j'ai publié, il y a plusieurs
exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme')
INSERT INTO table_1 VALUES (1, 'poire')
INSERT INTO table_1 VALUES (1, 'banane')
INSERT INTO table_1 VALUES (2, 'prune')
INSERT INTO table_1 VALUES (2, 'banane')
WITH
T1 AS
(SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N,
COUNT(*) OVER(PARTITION BY id) AS C
FROM table_1),
T2 AS
(SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots
FROM T1
WHERE N = 1
UNION ALL
SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc
FROM T1
INNER JOIN T2
ON T2.N + 1 = T1.N
AND T1.id = T2.id)
SELECT id, mots
FROM T2
WHERE N = C
id mots
----------- ----------------------------
2 banane, prune
1 banane, poire, pomme
A +
__________________
Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" <dol...@xxx.com> wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1
--------
id mc
-- ---
1 pomme
1 poire
1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous les mc
pour un id donné de manière à avoir ceci:
table_2
--------
id mc
-- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le faire avec
access une requete update du type:
UPDATE table_2
SET mc = table2.mc' ' | ' + table_1..mc
FROM table_1 INNER JOIN
table_2 ON table_1.id = table_1.id
C'est parfaitement possible en une seule requête sans fonctions avec une requête récursive introduite par la CTE. A ce sujet, lire l'article que j'ai publié, il y a plusieurs exemples : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
Dans votre cas :
CREATE TABLE table_1 (id int, mc varchar(8))
INSERT INTO table_1 VALUES (1, 'pomme') INSERT INTO table_1 VALUES (1, 'poire') INSERT INTO table_1 VALUES (1, 'banane') INSERT INTO table_1 VALUES (2, 'prune') INSERT INTO table_1 VALUES (2, 'banane')
WITH T1 AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY mc) AS N, COUNT(*) OVER(PARTITION BY id) AS C FROM table_1), T2 AS (SELECT id, N, C, CAST(mc AS VARCHAR(max)) AS mots FROM T1 WHERE N = 1 UNION ALL SELECT T1.id, T1.N, T1.C, mots + ', ' + T1.mc FROM T1 INNER JOIN T2 ON T2.N + 1 = T1.N AND T1.id = T2.id) SELECT id, mots FROM T2 WHERE N = C
id mots ----------- ---------------------------- 2 banane, prune 1 banane, poire, pomme
A + __________________ Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL. Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/ Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation * * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 12 jan, 16:57, "Dolten Altgor" wrote:
Bonjour à tous,
Je suis confronté à la problématique suivante:
table_1 --------
id mc -- --- 1 pomme 1 poire 1 banane
j'aurais souhaité mettre à jour une autre table en concatenant tous les mc pour un id donné de manière à avoir ceci:
table_2 --------
id mc -- ----
1 pomme | poire | banane
Cela paraît simple et j'avais réussi il y a quelque temps à le faire avec access une requete update du type:
UPDATE table_2 SET mc = table2.mc' ' | ' + table_1..mc FROM table_1 INNER JOIN table_2 ON table_1.id = table_1.id