Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

resultat dans une colonne

6 réponses
Avatar
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 ?

6 réponses

Avatar
EmanuelL
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
Avatar
bruno reiter
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur le
Net)

BR

"EmanuelL" wrote in message
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




Avatar
Ch.
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" a écrit dans le message de
news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" wrote in message
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







Avatar
Ch.
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" a écrit dans le message de
news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" wrote in message
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







Avatar
bruno reiter
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." wrote in message
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" a écrit dans le message de
news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples sur
le Net)

BR

"EmanuelL" wrote in message
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










Avatar
Fred BROUARD
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." wrote in message
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" a écrit dans le message
de news:
ou éventuellement une fonction de concaténation CLR (plein d'exemples
sur le Net)

BR

"EmanuelL" wrote in message
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 *************************