OVH Cloud OVH Cloud

concatenation, regroupement en SQL (spé Fred)

4 réponses
Avatar
Christophe
je sais que ce n'est pas conventionnel mais bon il y'a de l'existant et les
dirigeant sont souvent frileux a vouloir changer la methode surtout quand
celle ci fontionne comme cela actuellement !

(Fred ne crie pas on peut pas toujours faire pour le mieux ou comme l'on
voudrait !)


alors voila !

j'ai une table qui contient une reference saga (imaginons la saga alien)
ca donnerais

idsaga idfilm
1 2115
1 1238
1 16886
1 15687

comment faire pour concatener les id films comme suit
idsaga reffilms
1 2115;1238;16886;15687


peut t'on eviter une boucle ?
Fred tu dois avoir un truc sous le coude non ?

4 réponses

Avatar
SQLpro [MVP]
Christophe a écrit :
je sais que ce n'est pas conventionnel mais bon il y'a de l'existant et les
dirigeant sont souvent frileux a vouloir changer la methode surtout quand
celle ci fontionne comme cela actuellement !

(Fred ne crie pas on peut pas toujours faire pour le mieux ou comme l'on
voudrait !)


alors voila !

j'ai une table qui contient une reference saga (imaginons la saga alien)
ca donnerais

idsaga idfilm
1 2115
1 1238
1 16886
1 15687

comment faire pour concatener les id films comme suit
idsaga reffilms
1 2115;1238;16886;15687


peut t'on eviter une boucle ?
Fred tu dois avoir un truc sous le coude non ?






Oui une UDF... Des perf donc bien merdique est des utilisateurs et DSI
qui râleront en disant a cette merde de MS SQL Server... Je vous l'avait
bien dit, Oracle c'est tout de même bien plus performant !

Tout cela parce que des informmaticiens nullissimes font des verrues
abominables au mépris des règles de l'art !

Donc la solution :

CREATE FUNCTION dbo.F_CONCAT_SELECT_IDFILM (@ids INT)
RETURNS VARCHAR(8000)
AS
BEGIN

IF @ids IS NULL RETURN NULL

DECLARE @OUT VARCHAR(8000)
SET @OUT = ''

SELECT @OUT = @OUT + COALESCE(idfilm +';', '')
FROM MaTable
WHERE idsaga = @ids

RETURN @OUT

END
GO

-- utilisation :

SELECT idsaga, dbo.F_CONCAT_SELECT_IDFILM (@idsaga)
FROM MaTable


A +


--
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
********************* http://www.datasapiens.com ***********************
Avatar
Christophe
je savais que ca t'enerverrais !
Toutefois il faut que tu prennes en compte leurs choix pourquoi ?

C'est souvent le resultat du passé !
des developpeurs differents qui ont surchargés des procedures parce que les
besoins ont augmentés !
Et apres avoir essuyé plusieurs platres ils ne sont plus tres chaud à de
gros changements dans des procedures qui on au moins le merite de
fonctionner.

je n'adhere pas forcement mais en tout les cas je les comprends !
De plus nouvellement arrivé dans une boite, tu ne peux pas tout retourner !

Merci pour la fonction !




"SQLpro [MVP]" a écrit dans le message de
news:
Christophe a écrit :
> je sais que ce n'est pas conventionnel mais bon il y'a de l'existant et


les
> dirigeant sont souvent frileux a vouloir changer la methode surtout


quand
> celle ci fontionne comme cela actuellement !
>
> (Fred ne crie pas on peut pas toujours faire pour le mieux ou comme l'on
> voudrait !)
>
>
> alors voila !
>
> j'ai une table qui contient une reference saga (imaginons la saga alien)
> ca donnerais
>
> idsaga idfilm
> 1 2115
> 1 1238
> 1 16886
> 1 15687
>
> comment faire pour concatener les id films comme suit
> idsaga reffilms
> 1 2115;1238;16886;15687
>
>
> peut t'on eviter une boucle ?
> Fred tu dois avoir un truc sous le coude non ?
>
>


Oui une UDF... Des perf donc bien merdique est des utilisateurs et DSI
qui râleront en disant a cette merde de MS SQL Server... Je vous l'avait
bien dit, Oracle c'est tout de même bien plus performant !

Tout cela parce que des informmaticiens nullissimes font des verrues
abominables au mépris des règles de l'art !

Donc la solution :

CREATE FUNCTION dbo.F_CONCAT_SELECT_IDFILM (@ids INT)
RETURNS VARCHAR(8000)
AS
BEGIN

IF @ids IS NULL RETURN NULL

DECLARE @OUT VARCHAR(8000)
SET @OUT = ''

SELECT @OUT = @OUT + COALESCE(idfilm +';', '')
FROM MaTable
WHERE idsaga = @ids

RETURN @OUT

END
GO

-- utilisation :

SELECT idsaga, dbo.F_CONCAT_SELECT_IDFILM (@idsaga)
FROM MaTable


A +


--
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
********************* http://www.datasapiens.com ***********************


Avatar
SQLpro [MVP]
Christophe a écrit :
je savais que ca t'enerverrais !
Toutefois il faut que tu prennes en compte leurs choix pourquoi ?

C'est souvent le resultat du passé !
des developpeurs differents qui ont surchargés des procedures parce que les
besoins ont augmentés !
Et apres avoir essuyé plusieurs platres ils ne sont plus tres chaud à de
gros changements dans des procedures qui on au moins le merite de
fonctionner.

je n'adhere pas forcement mais en tout les cas je les comprends !
De plus nouvellement arrivé dans une boite, tu ne peux pas tout retourner !

Merci pour la fonction !




Je râle, mais en même temps cela m'apporte du boulot à terme...
Parce que dans quelques mois ou années les volumes de données, comme les
transactions ayant augmentés les performances seront lamentables et on
fera appel à des gens comme moi pour rectifier le tir...

Donc, continuez comme ça, je sent que je vais avoir un max de boulot !!!

;-)

A +





"SQLpro [MVP]" a écrit dans le message de
news:
Christophe a écrit :
je sais que ce n'est pas conventionnel mais bon il y'a de l'existant et




les
dirigeant sont souvent frileux a vouloir changer la methode surtout




quand
celle ci fontionne comme cela actuellement !

(Fred ne crie pas on peut pas toujours faire pour le mieux ou comme l'on
voudrait !)


alors voila !

j'ai une table qui contient une reference saga (imaginons la saga alien)
ca donnerais

idsaga idfilm
1 2115
1 1238
1 16886
1 15687

comment faire pour concatener les id films comme suit
idsaga reffilms
1 2115;1238;16886;15687


peut t'on eviter une boucle ?
Fred tu dois avoir un truc sous le coude non ?





Oui une UDF... Des perf donc bien merdique est des utilisateurs et DSI
qui râleront en disant a cette merde de MS SQL Server... Je vous l'avait
bien dit, Oracle c'est tout de même bien plus performant !

Tout cela parce que des informmaticiens nullissimes font des verrues
abominables au mépris des règles de l'art !

Donc la solution :

CREATE FUNCTION dbo.F_CONCAT_SELECT_IDFILM (@ids INT)
RETURNS VARCHAR(8000)
AS
BEGIN

IF @ids IS NULL RETURN NULL

DECLARE @OUT VARCHAR(8000)
SET @OUT = ''

SELECT @OUT = @OUT + COALESCE(idfilm +';', '')
FROM MaTable
WHERE idsaga = @ids

RETURN @OUT

END
GO

-- utilisation :

SELECT idsaga, dbo.F_CONCAT_SELECT_IDFILM (@idsaga)
FROM MaTable


A +


--
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
********************* http://www.datasapiens.com ***********************








--
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
********************* http://www.datasapiens.com ***********************
Avatar
Christophe
Yes tu as raison, tu vois qu'il y'a toujours des solutions
c'est bien dommage que je viens de commencer à bosser pour une nlle boite,
car j'aurais aimé faire un petit stage avec toi, je pense que j'aurais
beaucoup appris !
peut etre un jour !

@+ et prepare a quelques nuits blanches dans un avenir tres proche ! ;)



"SQLpro [MVP]" a écrit dans le message de
news:
Christophe a écrit :
> je savais que ca t'enerverrais !
> Toutefois il faut que tu prennes en compte leurs choix pourquoi ?
>
> C'est souvent le resultat du passé !
> des developpeurs differents qui ont surchargés des procedures parce que


les
> besoins ont augmentés !
> Et apres avoir essuyé plusieurs platres ils ne sont plus tres chaud à de
> gros changements dans des procedures qui on au moins le merite de
> fonctionner.
>
> je n'adhere pas forcement mais en tout les cas je les comprends !
> De plus nouvellement arrivé dans une boite, tu ne peux pas tout


retourner !
>
> Merci pour la fonction !


Je râle, mais en même temps cela m'apporte du boulot à terme...
Parce que dans quelques mois ou années les volumes de données, comme les
transactions ayant augmentés les performances seront lamentables et on
fera appel à des gens comme moi pour rectifier le tir...

Donc, continuez comme ça, je sent que je vais avoir un max de boulot !!!

;-)

A +

>
>
>
>
> "SQLpro [MVP]" a écrit dans le message de
> news:
>> Christophe a écrit :
>>> je sais que ce n'est pas conventionnel mais bon il y'a de l'existant


et
> les
>>> dirigeant sont souvent frileux a vouloir changer la methode surtout
> quand
>>> celle ci fontionne comme cela actuellement !
>>>
>>> (Fred ne crie pas on peut pas toujours faire pour le mieux ou comme


l'on
>>> voudrait !)
>>>
>>>
>>> alors voila !
>>>
>>> j'ai une table qui contient une reference saga (imaginons la saga


alien)
>>> ca donnerais
>>>
>>> idsaga idfilm
>>> 1 2115
>>> 1 1238
>>> 1 16886
>>> 1 15687
>>>
>>> comment faire pour concatener les id films comme suit
>>> idsaga reffilms
>>> 1 2115;1238;16886;15687
>>>
>>>
>>> peut t'on eviter une boucle ?
>>> Fred tu dois avoir un truc sous le coude non ?
>>>
>>>
>>
>> Oui une UDF... Des perf donc bien merdique est des utilisateurs et DSI
>> qui râleront en disant a cette merde de MS SQL Server... Je vous


l'avait
>> bien dit, Oracle c'est tout de même bien plus performant !
>>
>> Tout cela parce que des informmaticiens nullissimes font des verrues
>> abominables au mépris des règles de l'art !
>>
>> Donc la solution :
>>
>> CREATE FUNCTION dbo.F_CONCAT_SELECT_IDFILM (@ids INT)
>> RETURNS VARCHAR(8000)
>> AS
>> BEGIN
>>
>> IF @ids IS NULL RETURN NULL
>>
>> DECLARE @OUT VARCHAR(8000)
>> SET @OUT = ''
>>
>> SELECT @OUT = @OUT + COALESCE(idfilm +';', '')
>> FROM MaTable
>> WHERE idsaga = @ids
>>
>> RETURN @OUT
>>
>> END
>> GO
>>
>> -- utilisation :
>>
>> SELECT idsaga, dbo.F_CONCAT_SELECT_IDFILM (@idsaga)
>> FROM MaTable
>>
>>
>> A +
>>
>>
>> --
>> 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
>> ********************* http://www.datasapiens.com


***********************
>
>


--
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
********************* http://www.datasapiens.com ***********************