resultat dans une colonne

Le
Ch.
Un truc bete, mais a part faire une focntion specifique je vois pas comment
le resoudre.



j'ai 2 tables
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient les
valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la table A
je renvoi donc la ligne incriminé et toute les anomalies que le client doit
corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction


avez vous des pistes ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
EmanuelL
Le #19992001
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server
2005 ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas comment
le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient les
valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la table A
je renvoi donc la ligne incriminé et toute les anomalies que le client doit
corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
bruno reiter
Le #19992611
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur le
Net)

BR

"EmanuelL" news:
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server 2005
ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas
comment le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient
les valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la table
A
je renvoi donc la ligne incriminé et toute les anomalies que le client
doit corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette
forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org




Ch.
Le #19993401
oui bruno avec une fonction ca marche nickel.
je voulais juste savoir si il y'avait un moyen dans l''ecriture du T-SQL

c'est pour moi Perso, je suis presque sur qu'il doit y avoir un moyen de
faire ça, sans fonction.




"bruno reiter" news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" news:
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server 2005
ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas
comment le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient
les valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la
table A
je renvoi donc la ligne incriminé et toute les anomalies que le client
doit corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette
forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org







Ch.
Le #19997051
un bon moyen basé sur le XML

voici un exemple de mon code à adapter pour le votre

SELECT lg3.CLE_TOTO_LG3 AS ZER,
(
SELECT b.[LIBELLE] AS [A]
FROM [TOTO_LG3_TYPE_ANOMALIES] AS A
INNER JOIN TOTO_crm.dbo.ref_anomalies AS B
ON b.[CLE_REF_ANOMALIES] = a.[CLE_REF_ANOMALIES]
WHERE a.[CLE_TOTO_LG3] = lg3.[CLE_TOTO_LG3]
ORDER BY a.[CLE_TOTO_LG3]
FOR XML PATH('')
)
AS ANO
FROM [TOTO_LG3] AS LG3
INNER JOIN TOTO_LG3_TYPE_ANOMALIES AS ZZ
ON lg3.[CLE_TOTO_LG3] = zz.[CLE_TOTO_LG3]
GROUP BY lg3.[CLE_TOTO_LG3]
ORDER BY 1



"bruno reiter" news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" news:
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server 2005
ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas
comment le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient
les valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la
table A
je renvoi donc la ligne incriminé et toute les anomalies que le client
doit corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette
forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org







bruno reiter
Le #20000111
USE AdventureWorks2008
GO

-- concaténation sur agrégation avec XML-----------------------------

SELECT DISTINCT GroupName,
SUBSTRING(
(SELECT ','+name AS [text()]
FROM HumanResources.Department
WHERE GroupName = T.GroupName
ORDER BY name
FOR XML PATH( '' )
), 2,100) AS concat
FROM HumanResources.Department AS T;

-- concaténation sur agrégation avec UDF-----------------------------

CREATE FUNCTION dbo.Concat (@Param NVARCHAR(50))
RETURNS NVARCHAR(4000)AS
BEGIN
DECLARE @Output NVARCHAR(4000)
SET @Output = ''
SELECT @Output = CASE @Output
WHEN '' THEN name
ELSE @Output + ', ' + name
END
FROM HumanResources.Department
WHERE GroupName = @Param
ORDER BY name

RETURN @Output
END
GO


SELECT DISTINCT GroupName, dbo.Concat(GroupName)FROM
HumanResources.Department
ORDER BY GroupName



"Ch." news:
oui bruno avec une fonction ca marche nickel.
je voulais juste savoir si il y'avait un moyen dans l''ecriture du T-SQL

c'est pour moi Perso, je suis presque sur qu'il doit y avoir un moyen de
faire ça, sans fonction.




"bruno reiter" news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" news:
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server 2005
ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas
comment le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui contient
les valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la
table A
je renvoi donc la ligne incriminé et toute les anomalies que le client
doit corriger.
mais comme je peut pas lui donner il faut que je lui rende sous cette
forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un simple
select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org










Fred BROUARD
Le #20131361
Attention Bruno, je suis tombé sur un os en utilisant du VARCHAR(n)
(limité) en concaténation car dans ce cas SQL Server ne garantie en
aucune manière le résultat. Il faut impérativement du VARCHAR(max )!
J'ai posté cela dans les forums internes MS MVP

A +




bruno reiter a écrit :
USE AdventureWorks2008
GO

-- concaténation sur agrégation avec XML-----------------------------

SELECT DISTINCT GroupName,
SUBSTRING(
(SELECT ','+name AS [text()]
FROM HumanResources.Department
WHERE GroupName = T.GroupName
ORDER BY name
FOR XML PATH( '' )
), 2,100) AS concat
FROM HumanResources.Department AS T;

-- concaténation sur agrégation avec UDF-----------------------------

CREATE FUNCTION dbo.Concat (@Param NVARCHAR(50))
RETURNS NVARCHAR(4000)AS
BEGIN
DECLARE @Output NVARCHAR(4000)
SET @Output = ''
SELECT @Output = CASE @Output
WHEN '' THEN name
ELSE @Output + ', ' + name
END
FROM HumanResources.Department
WHERE GroupName = @Param
ORDER BY name

RETURN @Output
END
GO


SELECT DISTINCT GroupName, dbo.Concat(GroupName)FROM
HumanResources.Department
ORDER BY GroupName



"Ch." news:
oui bruno avec une fonction ca marche nickel.
je voulais juste savoir si il y'avait un moyen dans l''ecriture du T-SQL

c'est pour moi Perso, je suis presque sur qu'il doit y avoir un moyen
de faire ça, sans fonction.




"bruno reiter" de news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples
sur le Net)

BR

"EmanuelL" news:
Bonjour Ch,

Regardes un peu du côté des PIVOT et Cross Join si tu as SQL Server
2005 ou plus.

A+ ;-)

Le 26.08.2009, Ch. a supposé :
Un truc bete, mais a part faire une focntion specifique je vois pas
comment le resoudre.



j'ai 2 tables ...
une ligne de la table A peut ramener n ligne de la table B

pour les besoins d'un client
je dois ramener sa ligne de la table A, rajouter un champ qui
contient les valeurs de la table B si il y'a des enregistrements.

Table A = ID1
table B
ID1 | TOTO
ID1 | TITI
ID1 | ZOZO


devrait donner
ID1 ; TOTO | TITI | ZOZO

en gros la table B est une liste d'anomalies metier trouvées sur la
table A
je renvoi donc la ligne incriminé et toute les anomalies que le
client doit corriger.
mais comme je peut pas lui donner il faut que je lui rende sous
cette forme.


comme je le disais je pense qu'on doit pouvoir le faire avec un
simple select, mais j'ai pas trouvé a part avec une fonction...


avez vous des pistes ?



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org















--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Publicité
Poster une réponse
Anonyme