passage en colone

Le
Christophe
Bonjour à tous,

pour certaines applications externe je dois fournir mes DE à plat.
j'aimerais juste savoir quelle methode vous utilisez pour ce genre de cas.

exemple.
j'ai une table de liens comme ça.
CLE_PK, CLE_UID, REF_TYPE, VALEUR
1,50,'DEP','75'
2,50,'CP','75015'
3,50,'VILLE','PARIS'

en gros je dois rendre le tout sur une ligne car regroupé sur la cle_uid
CLE_UID, DEP,CP,VILLE
50,'75','75015','PARIS'


bien sur j'ai quelques millions de lignes pour quelques millions d'individus
quand je fais un case when apres coup je suis obligé de regrouper
car je me retrouve avec une colonne remplit mais sur plusieurs lignes


voici le genre de requete
Select CLE_UID,
case when ref_type = 'DEP' then valeur else null end as DEP,
case when ref_type = 'CP' then valeur else null end as CP,
case when ref_type = 'VILLE' then valeur else null end as VILLE
from matable

donc re obligé de faire un regroupement apres coup donc 2 passages

-le pivot je ne sais pas si il pourrait convenir à mon cas, quel perfs sur
des millions de lignes ?

-le XML est-ce qu'une requete bien ecrite pourrais resortir à plat.
car une colonne de type XML contient l'ensemble des données de la table liée,
y'aurait'il une astuce dans cette voie ?


Merci par avance de votre aide.
Ch.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #20942511
Christophe a écrit :
Bonjour à tous,

pour certaines applications externe je dois fournir mes DE à plat.
j'aimerais juste savoir quelle methode vous utilisez pour ce genre de cas.

exemple.
j'ai une table de liens comme ça.
CLE_PK, CLE_UID, REF_TYPE, VALEUR
1,50,'DEP','75'
2,50,'CP','75015'
3,50,'VILLE','PARIS'

en gros je dois rendre le tout sur une ligne car regroupé sur la cle_uid
CLE_UID, DEP,CP,VILLE
50,'75','75015','PARIS'


bien sur j'ai quelques millions de lignes pour quelques millions d'individus
quand je fais un case when apres coup je suis obligé de regrouper
car je me retrouve avec une colonne remplit mais sur plusieurs lignes


voici le genre de requete
Select CLE_UID,
case when ref_type = 'DEP' then valeur else null end as DEP,
case when ref_type = 'CP' then valeur else null end as CP,
case when ref_type = 'VILLE' then valeur else null end as VILLE
from matable

donc re obligé de faire un regroupement apres coup donc 2 passages

-le pivot je ne sais pas si il pourrait convenir à mon cas, quel perfs sur
des millions de lignes ?

-le XML est-ce qu'une requete bien ecrite pourrais resortir à plat.
car une colonne de type XML contient l'ensemble des données de la table liée,
y'aurait'il une astuce dans cette voie ?


Merci par avance de votre aide.
Ch.



Je ne sais pas si c'est possible (compte tenu des restrictions
applicables), mais tentez une vue indexée en utilisant le CASE.

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
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Sylvain Lafontaine
Le #20946791
Vous ne dites pas si les valeurs de REF_TYPE sont pré-définies et connues
par avance ou si elles peuvent varier d'une Clef_UID à l'autre.

Si elles sont connues par avance, alors l'ajout de deux self-joins devrait
résoudre votre problème:

Select t1.clef_uid as CLEF_UID, t1.valeur as DEP, t2.valeur as CP, t3.valeur
as VILLE
From TableLiens t1 inner join
TableLiens t2 on (t1.clef_uid = t2.clef_uid and t2.CLE_UID = 'CP')
inner join
TableLiens t3 on (t1.clef_uid = t3.clef_uid and t3.CLE_UID =
'VILLE')
Where t1.CLE_UID = 'DEP'

Évidemment, si il peut y avoir des valeurs manquantes, vous devez remplacez
les INNER JOIN par des LEFT JOIN.

Si les valeurs de REF_TYPE ne sont pas connues d'avance, alors là, cela
devient plus difficile.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Christophe" news:
Bonjour à tous,

pour certaines applications externe je dois fournir mes DE à plat.
j'aimerais juste savoir quelle methode vous utilisez pour ce genre de cas.

exemple.
j'ai une table de liens comme ça.
CLE_PK, CLE_UID, REF_TYPE, VALEUR
1,50,'DEP','75'
2,50,'CP','75015'
3,50,'VILLE','PARIS'

en gros je dois rendre le tout sur une ligne car regroupé sur la cle_uid
CLE_UID, DEP,CP,VILLE
50,'75','75015','PARIS'


bien sur j'ai quelques millions de lignes pour quelques millions
d'individus
quand je fais un case when apres coup je suis obligé de regrouper
car je me retrouve avec une colonne remplit mais sur plusieurs lignes


voici le genre de requete
Select CLE_UID,
case when ref_type = 'DEP' then valeur else null end as DEP,
case when ref_type = 'CP' then valeur else null end as CP,
case when ref_type = 'VILLE' then valeur else null end as VILLE
from matable

donc re obligé de faire un regroupement apres coup donc 2 passages

-le pivot je ne sais pas si il pourrait convenir à mon cas, quel perfs sur
des millions de lignes ?

-le XML est-ce qu'une requete bien ecrite pourrais resortir à plat.
car une colonne de type XML contient l'ensemble des données de la table
liée,
y'aurait'il une astuce dans cette voie ?


Merci par avance de votre aide.
Ch.



Ch.
Le #20962591
et bien non les cle_ref_type ne sont pas connue à l'avance cela dit en
parcourant la table on peut les recuperer au moment de l'execution en
colonne.

pour le moment je contruie la table via des case when
mais apres je suis obligé de la regrouper car j'ai une ligne par valeur
differente (qui devient colonne)
mais c'est pas glop car j'ai ~20 lignes par personne et y'a un truc comme 60
millions de personnes ...
je vous laisse compter 1,2 milliards auquel je dois encore ajourter une
combinaison de cannaux...
soit ~2 milliards

ben moi qui voulait tester les 500 millions je vais taper les 2 milliards
direct...pas cool
je vais avoir de nouveaux problems je pense.


Ch.


"Sylvain Lafontaine" message de news:
Vous ne dites pas si les valeurs de REF_TYPE sont pré-définies et connues
par avance ou si elles peuvent varier d'une Clef_UID à l'autre.

Si elles sont connues par avance, alors l'ajout de deux self-joins devrait
résoudre votre problème:

Select t1.clef_uid as CLEF_UID, t1.valeur as DEP, t2.valeur as CP,
t3.valeur as VILLE
From TableLiens t1 inner join
TableLiens t2 on (t1.clef_uid = t2.clef_uid and t2.CLE_UID = 'CP')
inner join
TableLiens t3 on (t1.clef_uid = t3.clef_uid and t3.CLE_UID =
'VILLE')
Where t1.CLE_UID = 'DEP'

Évidemment, si il peut y avoir des valeurs manquantes, vous devez
remplacez les INNER JOIN par des LEFT JOIN.

Si les valeurs de REF_TYPE ne sont pas connues d'avance, alors là, cela
devient plus difficile.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Christophe" news:
Bonjour à tous,

pour certaines applications externe je dois fournir mes DE à plat.
j'aimerais juste savoir quelle methode vous utilisez pour ce genre de
cas.

exemple.
j'ai une table de liens comme ça.
CLE_PK, CLE_UID, REF_TYPE, VALEUR
1,50,'DEP','75'
2,50,'CP','75015'
3,50,'VILLE','PARIS'

en gros je dois rendre le tout sur une ligne car regroupé sur la cle_uid
CLE_UID, DEP,CP,VILLE
50,'75','75015','PARIS'


bien sur j'ai quelques millions de lignes pour quelques millions
d'individus
quand je fais un case when apres coup je suis obligé de regrouper
car je me retrouve avec une colonne remplit mais sur plusieurs lignes


voici le genre de requete
Select CLE_UID,
case when ref_type = 'DEP' then valeur else null end as DEP,
case when ref_type = 'CP' then valeur else null end as CP,
case when ref_type = 'VILLE' then valeur else null end as VILLE
from matable

donc re obligé de faire un regroupement apres coup donc 2 passages

-le pivot je ne sais pas si il pourrait convenir à mon cas, quel perfs
sur
des millions de lignes ?

-le XML est-ce qu'une requete bien ecrite pourrais resortir à plat.
car une colonne de type XML contient l'ensemble des données de la table
liée,
y'aurait'il une astuce dans cette voie ?


Merci par avance de votre aide.
Ch.







Publicité
Poster une réponse
Anonyme