Je génere un fichier texte via une requête par une instruction select:
SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
Mon pb est le suivant:
Dans le résultat de la requête, je désire répéter certaines lignes en
fonction de la valeur prise par un champ précis (DO_COLISAGE).
Plus explicitement, je genere des lignes qui permettent l'impression des
étiquettes destinées à l'expédition des colis. Chaque expédition génère une
ligne dans le résultat de la requête. Or pour une même expédition je peux
avoir plusieurs colis.
Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis)
est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête,
autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux fois
la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais + de
20 colis pour la meme livraison).
J'espère avoir été clair!
Si quelqu'un peut m'aider, j'en serais trés heureux.
Merci à tous pour votre contribution.
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre From chiffre u cross join chiffre v Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage From colis a Join ( select u.value + 10 * v.value nombre from chiffre u cross join chiffre v ) b on (b.nombre<=a.colisage) Order by a.id_colis, b.nombre, a.colisage
"Marc" a écrit dans le message de news:
Bonjour,
Je génere un fichier texte via une requête par une instruction select: SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
Mon pb est le suivant: Dans le résultat de la requête, je désire répéter certaines lignes en fonction de la valeur prise par un champ précis (DO_COLISAGE). Plus explicitement, je genere des lignes qui permettent l'impression des étiquettes destinées à l'expédition des colis. Chaque expédition génère une ligne dans le résultat de la requête. Or pour une même expédition je peux avoir plusieurs colis. Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis) est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête, autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux fois la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais + de 20 colis pour la meme livraison).
J'espère avoir été clair!
Si quelqu'un peut m'aider, j'en serais trés heureux. Merci à tous pour votre contribution.
----- Marc
Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à 9.
\
Create table chiffre
(
value tinyint not null
, constraint pk_chiffre primary key (value)
)
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre
From chiffre u cross join chiffre v
Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage
From colis a
Join (
select u.value + 10 * v.value nombre
from chiffre u cross join chiffre v
) b on (b.nombre<=a.colisage)
Order by a.id_colis, b.nombre, a.colisage
"Marc" <Marc@discussions.microsoft.com> a écrit dans le message de news:
9F08ED5C-E624-490A-B47D-C9BEFD954B27@microsoft.com...
Bonjour,
Je génere un fichier texte via une requête par une instruction select:
SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
Mon pb est le suivant:
Dans le résultat de la requête, je désire répéter certaines lignes en
fonction de la valeur prise par un champ précis (DO_COLISAGE).
Plus explicitement, je genere des lignes qui permettent l'impression des
étiquettes destinées à l'expédition des colis. Chaque expédition génère
une
ligne dans le résultat de la requête. Or pour une même expédition je peux
avoir plusieurs colis.
Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis)
est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête,
autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux
fois
la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais +
de
20 colis pour la meme livraison).
J'espère avoir été clair!
Si quelqu'un peut m'aider, j'en serais trés heureux.
Merci à tous pour votre contribution.
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre From chiffre u cross join chiffre v Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage From colis a Join ( select u.value + 10 * v.value nombre from chiffre u cross join chiffre v ) b on (b.nombre<=a.colisage) Order by a.id_colis, b.nombre, a.colisage
"Marc" a écrit dans le message de news:
Bonjour,
Je génere un fichier texte via une requête par une instruction select: SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
Mon pb est le suivant: Dans le résultat de la requête, je désire répéter certaines lignes en fonction de la valeur prise par un champ précis (DO_COLISAGE). Plus explicitement, je genere des lignes qui permettent l'impression des étiquettes destinées à l'expédition des colis. Chaque expédition génère une ligne dans le résultat de la requête. Or pour une même expédition je peux avoir plusieurs colis. Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis) est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête, autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux fois la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais + de 20 colis pour la meme livraison).
J'espère avoir été clair!
Si quelqu'un peut m'aider, j'en serais trés heureux. Merci à tous pour votre contribution.
----- Marc
Marc
Merci pour cette réponse, sincèrement. Je n'ai pas tout compris, mais j'espère qu'en passant un peu de temps, je vais y arriver. Merci
-- Marc
"synopsis" a écrit :
Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à 9.
Create table chiffre ( value tinyint not null , constraint pk_chiffre primary key (value) )
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre From chiffre u cross join chiffre v Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage From colis a Join ( select u.value + 10 * v.value nombre from chiffre u cross join chiffre v ) b on (b.nombre<=a.colisage) Order by a.id_colis, b.nombre, a.colisage
"Marc" a écrit dans le message de news:
> Bonjour, > > Je génere un fichier texte via une requête par une instruction select: > SELECT champ1, champ2 FROM table1, table2 GROUP BY..... > > Mon pb est le suivant: > Dans le résultat de la requête, je désire répéter certaines lignes en > fonction de la valeur prise par un champ précis (DO_COLISAGE). > Plus explicitement, je genere des lignes qui permettent l'impression des > étiquettes destinées à l'expédition des colis. Chaque expédition génère > une > ligne dans le résultat de la requête. Or pour une même expédition je peux > avoir plusieurs colis. > Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis) > est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête, > autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux > fois > la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais + > de > 20 colis pour la meme livraison). > > J'espère avoir été clair! > > Si quelqu'un peut m'aider, j'en serais trés heureux. > Merci à tous pour votre contribution. > > > ----- > Marc
Merci pour cette réponse, sincèrement.
Je n'ai pas tout compris, mais j'espère qu'en passant un peu de temps, je
vais y arriver.
Merci
--
Marc
"synopsis" a écrit :
Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à 9.
\
Create table chiffre
(
value tinyint not null
, constraint pk_chiffre primary key (value)
)
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre
From chiffre u cross join chiffre v
Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage
From colis a
Join (
select u.value + 10 * v.value nombre
from chiffre u cross join chiffre v
) b on (b.nombre<=a.colisage)
Order by a.id_colis, b.nombre, a.colisage
"Marc" <Marc@discussions.microsoft.com> a écrit dans le message de news:
9F08ED5C-E624-490A-B47D-C9BEFD954B27@microsoft.com...
> Bonjour,
>
> Je génere un fichier texte via une requête par une instruction select:
> SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
>
> Mon pb est le suivant:
> Dans le résultat de la requête, je désire répéter certaines lignes en
> fonction de la valeur prise par un champ précis (DO_COLISAGE).
> Plus explicitement, je genere des lignes qui permettent l'impression des
> étiquettes destinées à l'expédition des colis. Chaque expédition génère
> une
> ligne dans le résultat de la requête. Or pour une même expédition je peux
> avoir plusieurs colis.
> Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis)
> est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête,
> autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux
> fois
> la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais +
> de
> 20 colis pour la meme livraison).
>
> J'espère avoir été clair!
>
> Si quelqu'un peut m'aider, j'en serais trés heureux.
> Merci à tous pour votre contribution.
>
>
> -----
> Marc
La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
Select u.value + 10 * v.value nombre From chiffre u cross join chiffre v Where u.value + 10 * v.value>0
Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
Select a.id_colis, b.nombre, colisage From colis a Join ( select u.value + 10 * v.value nombre from chiffre u cross join chiffre v ) b on (b.nombre<=a.colisage) Order by a.id_colis, b.nombre, a.colisage
"Marc" a écrit dans le message de news:
> Bonjour, > > Je génere un fichier texte via une requête par une instruction select: > SELECT champ1, champ2 FROM table1, table2 GROUP BY..... > > Mon pb est le suivant: > Dans le résultat de la requête, je désire répéter certaines lignes en > fonction de la valeur prise par un champ précis (DO_COLISAGE). > Plus explicitement, je genere des lignes qui permettent l'impression des > étiquettes destinées à l'expédition des colis. Chaque expédition génère > une > ligne dans le résultat de la requête. Or pour une même expédition je peux > avoir plusieurs colis. > Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de colis) > est supérérieur à 1, j'aimerais obtenir dans le résultat de la requête, > autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir deux > fois > la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais + > de > 20 colis pour la meme livraison). > > J'espère avoir été clair! > > Si quelqu'un peut m'aider, j'en serais trés heureux. > Merci à tous pour votre contribution. > > > ----- > Marc
Timur
La 'ruse' de synopsis permet de gérer 99 colis dans pour autant créer 99 lignes dans la table chiffre ... mais du coup ça complique un peu la requête !
Dans ton cas, si tu es limité à 20 colis, tu crée effectivement la table chiffre avec une seule colonne 'valeur', tu crée 20 enregistrements de 1 à 20 dans le champ valeur
et avec la requête
select * from colis join chiffre on chiffre.valeur <= colis.DO_COLISAGE
Si tu as 5 dans DO_COLISAGE, il va te faire une jointure avec 5 enregistrements dans chiffre (1,2,3,4 et 5) et donc te retourner 5 lignes ! Le champ colis.valeur peut même te servir à numéroter tes colis !! ;-)
-- Cordialement
"Marc" a écrit dans le message de news:
Merci pour cette réponse, sincèrement. Je n'ai pas tout compris, mais j'espère qu'en passant un peu de temps, je vais y arriver. Merci
-- Marc
"synopsis" a écrit :
> Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à
9.
> > > > Create table chiffre > ( > value tinyint not null > , constraint pk_chiffre primary key (value) > ) > > go > > set nocount on > insert chiffre values(0) > insert chiffre values(1) > insert chiffre values(2) > insert chiffre values(3) > insert chiffre values(4) > insert chiffre values(5) > insert chiffre values(6) > insert chiffre values(7) > insert chiffre values(8) > insert chiffre values(9) > > // > > La requête ci-dessous te renvoie tous les nombres de 1 à 99 : > > Select u.value + 10 * v.value nombre > From chiffre u cross join chiffre v > Where u.value + 10 * v.value>0 > > Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage > > Select a.id_colis, b.nombre, colisage > From colis a > Join ( > select u.value + 10 * v.value nombre > from chiffre u cross join chiffre v > ) b on (b.nombre<=a.colisage) > Order by a.id_colis, b.nombre, a.colisage > > > > "Marc" a écrit dans le message de news: > > > Bonjour, > > > > Je génere un fichier texte via une requête par une instruction select: > > SELECT champ1, champ2 FROM table1, table2 GROUP BY..... > > > > Mon pb est le suivant: > > Dans le résultat de la requête, je désire répéter certaines lignes en > > fonction de la valeur prise par un champ précis (DO_COLISAGE). > > Plus explicitement, je genere des lignes qui permettent l'impression
des
> > étiquettes destinées à l'expédition des colis. Chaque expédition
génère
> > une > > ligne dans le résultat de la requête. Or pour une même expédition je
peux
> > avoir plusieurs colis. > > Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de
colis)
> > est supérérieur à 1, j'aimerais obtenir dans le résultat de la
requête,
> > autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir
deux
> > fois > > la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais
+
> > de > > 20 colis pour la meme livraison). > > > > J'espère avoir été clair! > > > > Si quelqu'un peut m'aider, j'en serais trés heureux. > > Merci à tous pour votre contribution. > > > > > > ----- > > Marc > > >
La 'ruse' de synopsis permet de gérer 99 colis dans pour autant créer 99
lignes dans la table chiffre ... mais du coup ça complique un peu la requête
!
Dans ton cas, si tu es limité à 20 colis, tu crée effectivement la table
chiffre avec une seule colonne 'valeur',
tu crée 20 enregistrements de 1 à 20 dans le champ valeur
et avec la requête
select * from colis
join chiffre
on chiffre.valeur <= colis.DO_COLISAGE
Si tu as 5 dans DO_COLISAGE, il va te faire une jointure avec 5
enregistrements dans chiffre (1,2,3,4 et 5) et donc te retourner 5 lignes !
Le champ colis.valeur peut même te servir à numéroter tes colis !! ;-)
--
Cordialement
"Marc" <Marc@discussions.microsoft.com> a écrit dans le message de
news:3EBB38C9-3A64-41C8-864D-D323FF049411@microsoft.com...
Merci pour cette réponse, sincèrement.
Je n'ai pas tout compris, mais j'espère qu'en passant un peu de temps, je
vais y arriver.
Merci
--
Marc
"synopsis" a écrit :
> Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à
9.
>
> \
>
> Create table chiffre
> (
> value tinyint not null
> , constraint pk_chiffre primary key (value)
> )
>
> go
>
> set nocount on
> insert chiffre values(0)
> insert chiffre values(1)
> insert chiffre values(2)
> insert chiffre values(3)
> insert chiffre values(4)
> insert chiffre values(5)
> insert chiffre values(6)
> insert chiffre values(7)
> insert chiffre values(8)
> insert chiffre values(9)
>
> //
>
> La requête ci-dessous te renvoie tous les nombres de 1 à 99 :
>
> Select u.value + 10 * v.value nombre
> From chiffre u cross join chiffre v
> Where u.value + 10 * v.value>0
>
> Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage
>
> Select a.id_colis, b.nombre, colisage
> From colis a
> Join (
> select u.value + 10 * v.value nombre
> from chiffre u cross join chiffre v
> ) b on (b.nombre<=a.colisage)
> Order by a.id_colis, b.nombre, a.colisage
>
>
>
> "Marc" <Marc@discussions.microsoft.com> a écrit dans le message de news:
> 9F08ED5C-E624-490A-B47D-C9BEFD954B27@microsoft.com...
> > Bonjour,
> >
> > Je génere un fichier texte via une requête par une instruction select:
> > SELECT champ1, champ2 FROM table1, table2 GROUP BY.....
> >
> > Mon pb est le suivant:
> > Dans le résultat de la requête, je désire répéter certaines lignes en
> > fonction de la valeur prise par un champ précis (DO_COLISAGE).
> > Plus explicitement, je genere des lignes qui permettent l'impression
des
> > étiquettes destinées à l'expédition des colis. Chaque expédition
génère
> > une
> > ligne dans le résultat de la requête. Or pour une même expédition je
peux
> > avoir plusieurs colis.
> > Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de
colis)
> > est supérérieur à 1, j'aimerais obtenir dans le résultat de la
requête,
> > autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir
deux
> > fois
> > la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais
+
> > de
> > 20 colis pour la meme livraison).
> >
> > J'espère avoir été clair!
> >
> > Si quelqu'un peut m'aider, j'en serais trés heureux.
> > Merci à tous pour votre contribution.
> >
> >
> > -----
> > Marc
>
>
>
La 'ruse' de synopsis permet de gérer 99 colis dans pour autant créer 99 lignes dans la table chiffre ... mais du coup ça complique un peu la requête !
Dans ton cas, si tu es limité à 20 colis, tu crée effectivement la table chiffre avec une seule colonne 'valeur', tu crée 20 enregistrements de 1 à 20 dans le champ valeur
et avec la requête
select * from colis join chiffre on chiffre.valeur <= colis.DO_COLISAGE
Si tu as 5 dans DO_COLISAGE, il va te faire une jointure avec 5 enregistrements dans chiffre (1,2,3,4 et 5) et donc te retourner 5 lignes ! Le champ colis.valeur peut même te servir à numéroter tes colis !! ;-)
-- Cordialement
"Marc" a écrit dans le message de news:
Merci pour cette réponse, sincèrement. Je n'ai pas tout compris, mais j'espère qu'en passant un peu de temps, je vais y arriver. Merci
-- Marc
"synopsis" a écrit :
> Il faut tout d'abord une crée une table Chiffre, que tu alimentes de 0 à
9.
> > > > Create table chiffre > ( > value tinyint not null > , constraint pk_chiffre primary key (value) > ) > > go > > set nocount on > insert chiffre values(0) > insert chiffre values(1) > insert chiffre values(2) > insert chiffre values(3) > insert chiffre values(4) > insert chiffre values(5) > insert chiffre values(6) > insert chiffre values(7) > insert chiffre values(8) > insert chiffre values(9) > > // > > La requête ci-dessous te renvoie tous les nombres de 1 à 99 : > > Select u.value + 10 * v.value nombre > From chiffre u cross join chiffre v > Where u.value + 10 * v.value>0 > > Produit cartésien : [colis ] x [1-99] tel que nombre <= colisage > > Select a.id_colis, b.nombre, colisage > From colis a > Join ( > select u.value + 10 * v.value nombre > from chiffre u cross join chiffre v > ) b on (b.nombre<=a.colisage) > Order by a.id_colis, b.nombre, a.colisage > > > > "Marc" a écrit dans le message de news: > > > Bonjour, > > > > Je génere un fichier texte via une requête par une instruction select: > > SELECT champ1, champ2 FROM table1, table2 GROUP BY..... > > > > Mon pb est le suivant: > > Dans le résultat de la requête, je désire répéter certaines lignes en > > fonction de la valeur prise par un champ précis (DO_COLISAGE). > > Plus explicitement, je genere des lignes qui permettent l'impression
des
> > étiquettes destinées à l'expédition des colis. Chaque expédition
génère
> > une > > ligne dans le résultat de la requête. Or pour une même expédition je
peux
> > avoir plusieurs colis. > > Donc à chaque fois que le champ DO_COLISAGE (renseigne le nombre de
colis)
> > est supérérieur à 1, j'aimerais obtenir dans le résultat de la
requête,
> > autant de ligne qu'il y a de colis. Si il y a 2 colis je dois avoir
deux
> > fois > > la meme ligne. 3 Colis, 3 fois la meme ligne etc. (Je n'expédie jamais
+
> > de > > 20 colis pour la meme livraison). > > > > J'espère avoir été clair! > > > > Si quelqu'un peut m'aider, j'en serais trés heureux. > > Merci à tous pour votre contribution. > > > > > > ----- > > Marc > > >