Problème sur Requête avec plusieurs valeurs à ajouter

Le
Fino
Bonjour,

J'ai le problème suivant :

Dans une tabel j'ai un champ avec des données séparées par des points ex:
12.66.32.43

Dans un autre table j'ai l'information de correspondance de ces données ex :
12 correspond à rejet AAA , 66 correspond à Rejet XXX, 32 correspond à Rejet
ZZZ etc

Je voudrais faire une requête sur ma première table qui me remplace les
valeurs séparées par des points par les valeurs de correspondance sur une
seule ligne en concaténant les infos par exemple.

Au final je voudrais avoir dans un champ Rejet AAA, Rejet XXX, Rejet ZZZ

S vous pouviez m'aidez je sèche sur comment faire ?

Merci de votre aide.

Loïc
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 #11880421
Fino a écrit :
Bonjour,

J'ai le problème suivant :

Dans une tabel j'ai un champ avec des données séparées par des points ex:
12.66.32.43

Dans un autre table j'ai l'information de correspondance de ces données ex :
12 correspond à rejet AAA , 66 correspond à Rejet XXX, 32 correspond à Rejet
ZZZ etc...



Il est vraiement idiot d'avoir une base de données relationnelle et de
ne pas se conformer au modèle en mettant dans une seule et même colonne
plusieurs information. Ce genre de non modélisation qui ne respecte même
pas la première forme normal, conduit à des performances lamentables et
des requêtes imbitables.


Je voudrais faire une requête sur ma première table qui me remplace les
valeurs séparées par des points par les valeurs de correspondance sur une
seule ligne en concaténant les infos par exemple.



Cepandant et afin de vous tirer d'embarras voila un exemple de solution
(épouvantable en terme de perf) à votre problème :

CREATE TABLE T_STUPIDE_SPD (SPD_ID INT, SPD_IMBECILE VARCHAR(32))

INSERT INTO T_STUPIDE_SPD VALUES (1, '12.66.32.43')
INSERT INTO T_STUPIDE_SPD VALUES (2, '44.11.32.57')

CREATE TABLE T_CORRESPONDANCE_CPD (CPD_ID INT, CPD_LIBELLE VARCHAR(32))

INSERT INTO T_CORRESPONDANCE_CPD VALUES (12, 'Impayé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (66, 'Chèque sans provision')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (32, 'Délais dépassé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (43, 'Incomplet')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (44, 'Trop payé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (11, 'Relance')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (57, 'Avant échéance')

SELECT *
FROM T_STUPIDE_SPD S
INNER JOIN T_CORRESPONDANCE_CPD C
ON '.' + S.SPD_IMBECILE + '.'
LIKE '%' + CAST(C.CPD_ID AS VARCHAR(32)) + '%'

SPD_ID SPD_IMBECILE CPD_ID CPD_LIBELLE

----------- -------------------------------- ----------- ------------
1 12.66.32.43 12 Impayé
1 12.66.32.43 66 Chèque sans
provision
1 12.66.32.43 32 Délais dépassé
1 12.66.32.43 43 Incomplet
2 44.11.32.57 32 Délais dépassé
2 44.11.32.57 44 Trop payé
2 44.11.32.57 11 Relance
2 44.11.32.57 57 Avant échéance


Bien entendu il ne peut y avoir aucune solution performante à votre
demande tant que le modèle de données ne sera pas revu !


Au final je voudrais avoir dans un champ Rejet AAA, Rejet XXX, Rejet ZZZ

S vous pouviez m'aidez je sèche sur comment faire ?

Merci de votre aide.

Loïc




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
*********************** http://www.sqlspot.com *************************
Fino
Le #11880381
Merci je vais tester cela

Je vous rejoins complétement sur le modèle relationnelle non respecté mais
malheureusement je vais chercher mes données sur un base que je ne peux
modifier... et je sens que je vais encore découvrir d'autres incohérences !

Merci de votre réponse.


"Fred BROUARD" %23IC7c%
Fino a écrit :
Bonjour,

J'ai le problème suivant :

Dans une tabel j'ai un champ avec des données séparées par des points ex:
12.66.32.43

Dans un autre table j'ai l'information de correspondance de ces données
ex : 12 correspond à rejet AAA , 66 correspond à Rejet XXX, 32 correspond
à Rejet ZZZ etc...



Il est vraiement idiot d'avoir une base de données relationnelle et de ne
pas se conformer au modèle en mettant dans une seule et même colonne
plusieurs information. Ce genre de non modélisation qui ne respecte même
pas la première forme normal, conduit à des performances lamentables et
des requêtes imbitables.


Je voudrais faire une requête sur ma première table qui me remplace les
valeurs séparées par des points par les valeurs de correspondance sur une
seule ligne en concaténant les infos par exemple.



Cepandant et afin de vous tirer d'embarras voila un exemple de solution
(épouvantable en terme de perf) à votre problème :

CREATE TABLE T_STUPIDE_SPD (SPD_ID INT, SPD_IMBECILE VARCHAR(32))

INSERT INTO T_STUPIDE_SPD VALUES (1, '12.66.32.43')
INSERT INTO T_STUPIDE_SPD VALUES (2, '44.11.32.57')

CREATE TABLE T_CORRESPONDANCE_CPD (CPD_ID INT, CPD_LIBELLE VARCHAR(32))

INSERT INTO T_CORRESPONDANCE_CPD VALUES (12, 'Impayé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (66, 'Chèque sans provision')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (32, 'Délais dépassé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (43, 'Incomplet')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (44, 'Trop payé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (11, 'Relance')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (57, 'Avant échéance')

SELECT *
FROM T_STUPIDE_SPD S
INNER JOIN T_CORRESPONDANCE_CPD C
ON '.' + S.SPD_IMBECILE + '.'
LIKE '%' + CAST(C.CPD_ID AS VARCHAR(32)) + '%'

SPD_ID SPD_IMBECILE CPD_ID CPD_LIBELLE
----------- -------------------------------- ----------- ------------
1 12.66.32.43 12 Impayé
1 12.66.32.43 66 Chèque sans
provision
1 12.66.32.43 32 Délais dépassé
1 12.66.32.43 43 Incomplet
2 44.11.32.57 32 Délais dépassé
2 44.11.32.57 44 Trop payé
2 44.11.32.57 11 Relance
2 44.11.32.57 57 Avant échéance


Bien entendu il ne peut y avoir aucune solution performante à votre
demande tant que le modèle de données ne sera pas revu !


Au final je voudrais avoir dans un champ Rejet AAA, Rejet XXX, Rejet ZZZ

S vous pouviez m'aidez je sèche sur comment faire ?

Merci de votre aide.

Loïc


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
*********************** http://www.sqlspot.com *************************



helios services
Le #11879021
Fred BROUARD a écrit :
Fino a écrit :
Bonjour,

J'ai le problème suivant :

Dans une tabel j'ai un champ avec des données séparées par des points
ex: 12.66.32.43

Dans un autre table j'ai l'information de correspondance de ces
données ex : 12 correspond à rejet AAA , 66 correspond à Rejet XXX, 32
correspond à Rejet ZZZ etc...



Il est vraiement idiot d'avoir une base de données relationnelle et de
ne pas se conformer au modèle en mettant dans une seule et même colonne
plusieurs information. Ce genre de non modélisation qui ne respecte même
pas la première forme normal, conduit à des performances lamentables et
des requêtes imbitables.


Je voudrais faire une requête sur ma première table qui me remplace
les valeurs séparées par des points par les valeurs de correspondance
sur une seule ligne en concaténant les infos par exemple.



Cepandant et afin de vous tirer d'embarras voila un exemple de solution
(épouvantable en terme de perf) à votre problème :

CREATE TABLE T_STUPIDE_SPD (SPD_ID INT, SPD_IMBECILE VARCHAR(32))

INSERT INTO T_STUPIDE_SPD VALUES (1, '12.66.32.43')
INSERT INTO T_STUPIDE_SPD VALUES (2, '44.11.32.57')

CREATE TABLE T_CORRESPONDANCE_CPD (CPD_ID INT, CPD_LIBELLE VARCHAR(32))

INSERT INTO T_CORRESPONDANCE_CPD VALUES (12, 'Impayé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (66, 'Chèque sans provision')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (32, 'Délais dépassé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (43, 'Incomplet')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (44, 'Trop payé')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (11, 'Relance')
INSERT INTO T_CORRESPONDANCE_CPD VALUES (57, 'Avant échéance')

SELECT *
FROM T_STUPIDE_SPD S
INNER JOIN T_CORRESPONDANCE_CPD C
ON '.' + S.SPD_IMBECILE + '.'
LIKE '%' + CAST(C.CPD_ID AS VARCHAR(32)) + '%'

SPD_ID SPD_IMBECILE CPD_ID CPD_LIBELLE
----------- -------------------------------- ----------- ------------
1 12.66.32.43 12 Impayé
1 12.66.32.43 66 Chèque sans
provision
1 12.66.32.43 32 Délais dépassé
1 12.66.32.43 43 Incomplet
2 44.11.32.57 32 Délais dépassé
2 44.11.32.57 44 Trop payé
2 44.11.32.57 11 Relance
2 44.11.32.57 57 Avant échéance


Bien entendu il ne peut y avoir aucune solution performante à votre
demande tant que le modèle de données ne sera pas revu !


Au final je voudrais avoir dans un champ Rejet AAA, Rejet XXX, Rejet ZZZ

S vous pouviez m'aidez je sèche sur comment faire ?

Merci de votre aide.

Loïc



A +



mais peut on faire confiance à quelqu'un qui prétends coder plus de
65536 valeurs sur 2 octets ?

http://groups.google.com/group/fr.comp.applications.sgbd/msg/621527f995585842?dmode=source





et donc les écrits ont été bannis de wikipedia

--
Dr Thierry HOLZ
HELIOS SERVICES
180 rue de la croix du chene
60250 HEILLES
www.openqm.com02.net
www.pick.com02.net
Publicité
Poster une réponse
Anonyme