eviter boucle, quelle soluce CTE ???
Le
msnews.microsoft.com
--En gros j'ai une function de table dans laquelle j'envoie la valeur du
code et il me retourne autant de ligne que necessaire
--Seulement je suis obligé de faire une boucle
--comment pourrais je faire pour eviter la boucle et faire cela en une sorte
de select comme ça
--voici le bout de code pour illustrer
CREATE TABLE TEST (ID INT IDENTITY(1,1) PRIMARY KEY, CODE VARCHAR(50))
INSERT INTO test (code) VALUES ('100;1001')
INSERT INTO test (code) VALUES ('788')
INSERT INTO test (code) VALUES ('100;1001;888')
INSERT INTO test (code) VALUES ('150;178,188')
INSERT INTO test (code) VALUES ('100')
--En gros j'ai une function de table dans laquelle j'envoie la valeur du
code et il me retourne autant de ligne que necessaire
--Seulement je suis obligé de faire une boucle
--comment pourrais je faire pour eviter la boucle et faire cela en une sorte
de select comme ça
SELECT y.*
FROM ( SELECT ID, CODE
FROM test) AS Z
INNER JOIN
(SELECT z.ID, RESULT
FROM MASTER.dbo.mafunctionSplit(z.CODE,';')) Y
ON y.id = z.id
--pour avoir cela comme resultat
ID CODE
1 100
1 1001
2 788
3 100
3 1001
3 888
4 150
4 178
4 188
5 100
code et il me retourne autant de ligne que necessaire
--Seulement je suis obligé de faire une boucle
--comment pourrais je faire pour eviter la boucle et faire cela en une sorte
de select comme ça
--voici le bout de code pour illustrer
CREATE TABLE TEST (ID INT IDENTITY(1,1) PRIMARY KEY, CODE VARCHAR(50))
INSERT INTO test (code) VALUES ('100;1001')
INSERT INTO test (code) VALUES ('788')
INSERT INTO test (code) VALUES ('100;1001;888')
INSERT INTO test (code) VALUES ('150;178,188')
INSERT INTO test (code) VALUES ('100')
--En gros j'ai une function de table dans laquelle j'envoie la valeur du
code et il me retourne autant de ligne que necessaire
--Seulement je suis obligé de faire une boucle
--comment pourrais je faire pour eviter la boucle et faire cela en une sorte
de select comme ça
SELECT y.*
FROM ( SELECT ID, CODE
FROM test) AS Z
INNER JOIN
(SELECT z.ID, RESULT
FROM MASTER.dbo.mafunctionSplit(z.CODE,';')) Y
ON y.id = z.id
--pour avoir cela comme resultat
ID CODE
1 100
1 1001
2 788
3 100
3 1001
3 888
4 150
4 178
4 188
5 100

Poser une question


je crois que j'ai pas été au point sur le copié collé.
mais du coup personne n'a une idée ?
je suis obligé de faire une vilaine boucle ?
"msnews.microsoft.com" news:
contraire cad travailler avec des données normalisées et mettre en forme
quand le besoin s'en fait sentir plutôt que d'avoir des données
dénormalisées et de devoir les remettre en forme à chaque fois que je veux
faire une requête...
--
Patrice
"msnews.microsoft.com" groupe de discussion :
J'ai publié une solution à ton problème dans mon article général sur la
CTE :
http://sqlpro.developpez.com/cours/...sives/#LIX
A +
msnews.microsoft.com a écrit :
--
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.sqlspot.com *************************
je comprends un "peu" ce que tu veux dire, mais il existe aussi des
contraintes clients.
je reçois ce type de données j'essai juste de m'en sortir avec et d'eviter
des traitements lourds.
Mais dans une certaine logique, je ne trouve pas ça ridicule.
En gros cela correspond à l'attachement d'une personne à plusieurs
abonnements.
Ch.
"Patrice" news:
tu dois appeler une fonction pour des valeurs différentes et récupérer
l'ensemble des lignes retournées par ces différents appels.
Tu as exploré la voie CTE suggérée par Fred ?
Bon courage.
--
Patrice
"msnews.microsoft.com" groupe de discussion :