GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 6 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
msnews.microsoft.com
Le #17273361
Bonjour à tous,

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:
--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


Patrice
Le #17273941
A brûle pourpoint ma préférence personnelle serait plutôt de faire le
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 :
Bonjour à tous,

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" de news:
--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





Fred BROUARD
Le #17289021
Salut,

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 :
--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




--
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 *************************
msnews.microsoft.com
Le #17327271
Patrice ,

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:
A brûle pourpoint ma préférence personnelle serait plutôt de faire le
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" de groupe de discussion :

Bonjour à tous,

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" de news:
--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








Patrice
Le #17329591
Pas ridicule, simplement pas facile. A mon avis, le fond du problème est que
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 :
Patrice ,

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:
A brûle pourpoint ma préférence personnelle serait plutôt de faire le
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" de groupe de discussion :

Bonjour à tous,

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" message de news:
--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











Publicité
Suivre les réponses
Poster une réponse
Anonyme