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

Problème sur une requete

6 réponses
Avatar
Thierry
Bonjour,

J'ai un problème sur une requete que je n'arrive pas à faire (sachant que je
ne suis pas sur que cela soit possible).Pour être plus clair je vais donner
un exemple:
J'ai une table de 3 colonnes:
F1 à F3 (Au depart F2 et F3 sont Null)
F1:
Pays1
Labo1
Produit1
Labo2
Produit1
...
J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant les
pays,3 espaces devant les labo, 5 espaces devant les produits....)
Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
produits)

Merci d'avance si quelqu'un connait la solution


Thierry

6 réponses

Avatar
bruno reiter
La solution est de modéliser correctement la base.

Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?

BR

"Thierry" wrote in message
news:
Bonjour,

J'ai un problème sur une requete que je n'arrive pas à faire (sachant que
je
ne suis pas sur que cela soit possible).Pour être plus clair je vais
donner
un exemple:
J'ai une table de 3 colonnes:
F1 à F3 (Au depart F2 et F3 sont Null)
F1:
Pays1
Labo1
Produit1
Labo2
Produit1
...
J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
les
pays,3 espaces devant les labo, 5 espaces devant les produits....)
Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
produits)

Merci d'avance si quelqu'un connait la solution


Thierry



Avatar
Thierry
Bonjour bruno et merci de t'interresser à mon problème.

en fait c'est une extration *.txt d'un CDROM de donnée et je n'est pas le
choix du modele.
Je me contante,pour l'instant, de charger le fichier dans une table via DTS.
les seul "liens" que je peux exploiter sont le fait que les lignes de
produit commence par 5 espaces,les labo par 3 et les pays par 1 espace.De
plus les lignes sont trier de facon à ce que la hierarchie soit
respecté.(Jusqu'a présent je m'en sortais via VBA et excel mais pour des
raisons de praticité je voudrais transformer mon code VBA en requete SQL (ou
procedure?) de facon a integrer le résultat directement dans le datawarehouse
via un lot DTS

"bruno reiter" wrote:

La solution est de modéliser correctement la base.

Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?

BR

"Thierry" wrote in message
news:
> Bonjour,
>
> J'ai un problème sur une requete que je n'arrive pas à faire (sachant que
> je
> ne suis pas sur que cela soit possible).Pour être plus clair je vais
> donner
> un exemple:
> J'ai une table de 3 colonnes:
> F1 à F3 (Au depart F2 et F3 sont Null)
> F1:
> Pays1
> Labo1
> Produit1
> Labo2
> Produit1
> ...
> J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
> les
> pays,3 espaces devant les labo, 5 espaces devant les produits....)
> Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
> champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
> produits)
>
> Merci d'avance si quelqu'un connait la solution
>
>
> Thierry
>




Avatar
bruno reiter
l'idéal serait un bout de code applicatif qui prend en entrée le fichier et,
ligne à ligne transforme la 1ère colonne en 3 colonnes :
Pays1 Null Null
Pays1 Labo1 Null
Pays1 Labo1 Produit1
Pays1 Labo2 Null
Pays1 Labo2 Produit1
.......
puis traiter ce RecordSet

Sinon, sans doute avec un curseur, en espérant qu'il maintiendra l'ordre des
lignes

BR


"Thierry" wrote in message
news:
Bonjour bruno et merci de t'interresser à mon problème.

en fait c'est une extration *.txt d'un CDROM de donnée et je n'est pas le
choix du modele.
Je me contante,pour l'instant, de charger le fichier dans une table via
DTS.
les seul "liens" que je peux exploiter sont le fait que les lignes de
produit commence par 5 espaces,les labo par 3 et les pays par 1 espace.De
plus les lignes sont trier de facon à ce que la hierarchie soit
respecté.(Jusqu'a présent je m'en sortais via VBA et excel mais pour des
raisons de praticité je voudrais transformer mon code VBA en requete SQL
(ou
procedure?) de facon a integrer le résultat directement dans le
datawarehouse
via un lot DTS

"bruno reiter" wrote:

La solution est de modéliser correctement la base.

Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?

BR

"Thierry" wrote in message
news:
> Bonjour,
>
> J'ai un problème sur une requete que je n'arrive pas à faire (sachant
> que
> je
> ne suis pas sur que cela soit possible).Pour être plus clair je vais
> donner
> un exemple:
> J'ai une table de 3 colonnes:
> F1 à F3 (Au depart F2 et F3 sont Null)
> F1:
> Pays1
> Labo1
> Produit1
> Labo2
> Produit1
> ...
> J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
> les
> pays,3 espaces devant les labo, 5 espaces devant les produits....)
> Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
> champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
> produits)
>
> Merci d'avance si quelqu'un connait la solution
>
>
> Thierry
>






Avatar
mikedavem
Bonjour,

Si votre fichier respecte toujours la même hiérarchie,

Vous pouvez tenter ce extrait de code (A adapter selon votre cas)

DECLARE @t TABLE
(
F1 VARCHAR(50)
)

INSERT INTO @t VALUES ('Pays1')
INSERT INTO @t VALUES (' Labo1')
INSERT INTO @t VALUES (' Produit1')
INSERT INTO @t VALUES ('Pays2')
INSERT INTO @t VALUES (' Labo2')
INSERT INTO @t VALUES (' Produit2')
INSERT INTO @t VALUES ('Pays3')
INSERT INTO @t VALUES (' Labo3')
INSERT INTO @t VALUES (' Produit3');

WITH CTE_ESCAPE
AS
(
SELECT
DENSE_RANK() OVER (PARTITION BY PATINDEX('%[A-Z]%',F1) ORDER BY
PATINDEX('%[A-Z]%',F1),F1) AS NUM,
PATINDEX('%[A-Z]%',F1) AS ID,
F1
FROM @t
)
SELECT
C.F1,
LTRIM(C2.F1) AS F2,
LTRIM(C3.F1) AS F3
FROM CTE_ESCAPE C
INNER JOIN CTE_ESCAPE C2
ON C.NUM = C2.NUM
AND C.ID < C2.ID
INNER JOIN CTE_ESCAPE C3
ON C2.NUM = C3.NUM
AND C2.ID < C3.ID;


--
MCDBA | MCTIP SQLSRV 2005


"bruno reiter" wrote:

l'idéal serait un bout de code applicatif qui prend en entrée le fichier et,
ligne à ligne transforme la 1ère colonne en 3 colonnes :
Pays1 Null Null
Pays1 Labo1 Null
Pays1 Labo1 Produit1
Pays1 Labo2 Null
Pays1 Labo2 Produit1
........
puis traiter ce RecordSet

Sinon, sans doute avec un curseur, en espérant qu'il maintiendra l'ordre des
lignes

BR


"Thierry" wrote in message
news:
> Bonjour bruno et merci de t'interresser à mon problème.
>
> en fait c'est une extration *.txt d'un CDROM de donnée et je n'est pas le
> choix du modele.
> Je me contante,pour l'instant, de charger le fichier dans une table via
> DTS.
> les seul "liens" que je peux exploiter sont le fait que les lignes de
> produit commence par 5 espaces,les labo par 3 et les pays par 1 espace.De
> plus les lignes sont trier de facon à ce que la hierarchie soit
> respecté.(Jusqu'a présent je m'en sortais via VBA et excel mais pour des
> raisons de praticité je voudrais transformer mon code VBA en requete SQL
> (ou
> procedure?) de facon a integrer le résultat directement dans le
> datawarehouse
> via un lot DTS
>
> "bruno reiter" wrote:
>
>> La solution est de modéliser correctement la base.
>>
>> Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?
>>
>> BR
>>
>> "Thierry" wrote in message
>> news:
>> > Bonjour,
>> >
>> > J'ai un problème sur une requete que je n'arrive pas à faire (sachant
>> > que
>> > je
>> > ne suis pas sur que cela soit possible).Pour être plus clair je vais
>> > donner
>> > un exemple:
>> > J'ai une table de 3 colonnes:
>> > F1 à F3 (Au depart F2 et F3 sont Null)
>> > F1:
>> > Pays1
>> > Labo1
>> > Produit1
>> > Labo2
>> > Produit1
>> > ...
>> > J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
>> > les
>> > pays,3 espaces devant les labo, 5 espaces devant les produits....)
>> > Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
>> > champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
>> > produits)
>> >
>> > Merci d'avance si quelqu'un connait la solution
>> >
>> >
>> > Thierry
>> >
>>
>>




Avatar
mikedavem
Vous pouvez également utiliser la fonction ROW_NUMBER() à la place de
DENSE_RANK(). Dans ce cas cela n'a pas d'importance

--
MCDBA | MCTIP SQLSRV 2005


"mikedavem" wrote:

Bonjour,

Si votre fichier respecte toujours la même hiérarchie,

Vous pouvez tenter ce extrait de code (A adapter selon votre cas)

DECLARE @t TABLE
(
F1 VARCHAR(50)
)

INSERT INTO @t VALUES ('Pays1')
INSERT INTO @t VALUES (' Labo1')
INSERT INTO @t VALUES (' Produit1')
INSERT INTO @t VALUES ('Pays2')
INSERT INTO @t VALUES (' Labo2')
INSERT INTO @t VALUES (' Produit2')
INSERT INTO @t VALUES ('Pays3')
INSERT INTO @t VALUES (' Labo3')
INSERT INTO @t VALUES (' Produit3');

WITH CTE_ESCAPE
AS
(
SELECT
DENSE_RANK() OVER (PARTITION BY PATINDEX('%[A-Z]%',F1) ORDER BY
PATINDEX('%[A-Z]%',F1),F1) AS NUM,
PATINDEX('%[A-Z]%',F1) AS ID,
F1
FROM @t
)
SELECT
C.F1,
LTRIM(C2.F1) AS F2,
LTRIM(C3.F1) AS F3
FROM CTE_ESCAPE C
INNER JOIN CTE_ESCAPE C2
ON C.NUM = C2.NUM
AND C.ID < C2.ID
INNER JOIN CTE_ESCAPE C3
ON C2.NUM = C3.NUM
AND C2.ID < C3.ID;


--
MCDBA | MCTIP SQLSRV 2005


"bruno reiter" wrote:

> l'idéal serait un bout de code applicatif qui prend en entrée le fichier et,
> ligne à ligne transforme la 1ère colonne en 3 colonnes :
> Pays1 Null Null
> Pays1 Labo1 Null
> Pays1 Labo1 Produit1
> Pays1 Labo2 Null
> Pays1 Labo2 Produit1
> ........
> puis traiter ce RecordSet
>
> Sinon, sans doute avec un curseur, en espérant qu'il maintiendra l'ordre des
> lignes
>
> BR
>
>
> "Thierry" wrote in message
> news:
> > Bonjour bruno et merci de t'interresser à mon problème.
> >
> > en fait c'est une extration *.txt d'un CDROM de donnée et je n'est pas le
> > choix du modele.
> > Je me contante,pour l'instant, de charger le fichier dans une table via
> > DTS.
> > les seul "liens" que je peux exploiter sont le fait que les lignes de
> > produit commence par 5 espaces,les labo par 3 et les pays par 1 espace.De
> > plus les lignes sont trier de facon à ce que la hierarchie soit
> > respecté.(Jusqu'a présent je m'en sortais via VBA et excel mais pour des
> > raisons de praticité je voudrais transformer mon code VBA en requete SQL
> > (ou
> > procedure?) de facon a integrer le résultat directement dans le
> > datawarehouse
> > via un lot DTS
> >
> > "bruno reiter" wrote:
> >
> >> La solution est de modéliser correctement la base.
> >>
> >> Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?
> >>
> >> BR
> >>
> >> "Thierry" wrote in message
> >> news:
> >> > Bonjour,
> >> >
> >> > J'ai un problème sur une requete que je n'arrive pas à faire (sachant
> >> > que
> >> > je
> >> > ne suis pas sur que cela soit possible).Pour être plus clair je vais
> >> > donner
> >> > un exemple:
> >> > J'ai une table de 3 colonnes:
> >> > F1 à F3 (Au depart F2 et F3 sont Null)
> >> > F1:
> >> > Pays1
> >> > Labo1
> >> > Produit1
> >> > Labo2
> >> > Produit1
> >> > ...
> >> > J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
> >> > les
> >> > pays,3 espaces devant les labo, 5 espaces devant les produits....)
> >> > Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
> >> > champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
> >> > produits)
> >> >
> >> > Merci d'avance si quelqu'un connait la solution
> >> >
> >> >
> >> > Thierry
> >> >
> >>
> >>
>
>


Avatar
Thierry
Merci beaucoup pour toutes ces pistes
je vais essayer de ce pas


Merci encore

"mikedavem" wrote:

Vous pouvez également utiliser la fonction ROW_NUMBER() à la place de
DENSE_RANK(). Dans ce cas cela n'a pas d'importance

--
MCDBA | MCTIP SQLSRV 2005


"mikedavem" wrote:

> Bonjour,
>
> Si votre fichier respecte toujours la même hiérarchie,
>
> Vous pouvez tenter ce extrait de code (A adapter selon votre cas)
>
> DECLARE @t TABLE
> (
> F1 VARCHAR(50)
> )
>
> INSERT INTO @t VALUES ('Pays1')
> INSERT INTO @t VALUES (' Labo1')
> INSERT INTO @t VALUES (' Produit1')
> INSERT INTO @t VALUES ('Pays2')
> INSERT INTO @t VALUES (' Labo2')
> INSERT INTO @t VALUES (' Produit2')
> INSERT INTO @t VALUES ('Pays3')
> INSERT INTO @t VALUES (' Labo3')
> INSERT INTO @t VALUES (' Produit3');
>
> WITH CTE_ESCAPE
> AS
> (
> SELECT
> DENSE_RANK() OVER (PARTITION BY PATINDEX('%[A-Z]%',F1) ORDER BY
> PATINDEX('%[A-Z]%',F1),F1) AS NUM,
> PATINDEX('%[A-Z]%',F1) AS ID,
> F1
> FROM @t
> )
> SELECT
> C.F1,
> LTRIM(C2.F1) AS F2,
> LTRIM(C3.F1) AS F3
> FROM CTE_ESCAPE C
> INNER JOIN CTE_ESCAPE C2
> ON C.NUM = C2.NUM
> AND C.ID < C2.ID
> INNER JOIN CTE_ESCAPE C3
> ON C2.NUM = C3.NUM
> AND C2.ID < C3.ID;
>
>
> --
> MCDBA | MCTIP SQLSRV 2005
>
>
> "bruno reiter" wrote:
>
> > l'idéal serait un bout de code applicatif qui prend en entrée le fichier et,
> > ligne à ligne transforme la 1ère colonne en 3 colonnes :
> > Pays1 Null Null
> > Pays1 Labo1 Null
> > Pays1 Labo1 Produit1
> > Pays1 Labo2 Null
> > Pays1 Labo2 Produit1
> > ........
> > puis traiter ce RecordSet
> >
> > Sinon, sans doute avec un curseur, en espérant qu'il maintiendra l'ordre des
> > lignes
> >
> > BR
> >
> >
> > "Thierry" wrote in message
> > news:
> > > Bonjour bruno et merci de t'interresser à mon problème.
> > >
> > > en fait c'est une extration *.txt d'un CDROM de donnée et je n'est pas le
> > > choix du modele.
> > > Je me contante,pour l'instant, de charger le fichier dans une table via
> > > DTS.
> > > les seul "liens" que je peux exploiter sont le fait que les lignes de
> > > produit commence par 5 espaces,les labo par 3 et les pays par 1 espace.De
> > > plus les lignes sont trier de facon à ce que la hierarchie soit
> > > respecté.(Jusqu'a présent je m'en sortais via VBA et excel mais pour des
> > > raisons de praticité je voudrais transformer mon code VBA en requete SQL
> > > (ou
> > > procedure?) de facon a integrer le résultat directement dans le
> > > datawarehouse
> > > via un lot DTS
> > >
> > > "bruno reiter" wrote:
> > >
> > >> La solution est de modéliser correctement la base.
> > >>
> > >> Qu'est-ce qui relie le produit1 au labo1 ou au labo2 dans la ligne?
> > >>
> > >> BR
> > >>
> > >> "Thierry" wrote in message
> > >> news:
> > >> > Bonjour,
> > >> >
> > >> > J'ai un problème sur une requete que je n'arrive pas à faire (sachant
> > >> > que
> > >> > je
> > >> > ne suis pas sur que cela soit possible).Pour être plus clair je vais
> > >> > donner
> > >> > un exemple:
> > >> > J'ai une table de 3 colonnes:
> > >> > F1 à F3 (Au depart F2 et F3 sont Null)
> > >> > F1:
> > >> > Pays1
> > >> > Labo1
> > >> > Produit1
> > >> > Labo2
> > >> > Produit1
> > >> > ...
> > >> > J'ai donc une colonne F1 avec une hierarchie en cascade(1 espace devant
> > >> > les
> > >> > pays,3 espaces devant les labo, 5 espaces devant les produits....)
> > >> > Je voudrais via une requete SQL avoir les Pays,labos et produits sur 3
> > >> > champs diffèrents (F1 pour les pays, F2 pour les labos et F3 pour les
> > >> > produits)
> > >> >
> > >> > Merci d'avance si quelqu'un connait la solution
> > >> >
> > >> >
> > >> > Thierry
> > >> >
> > >>
> > >>
> >
> >