SOS aux forts en sql
Résolu
splims
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
splims Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
splims Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je retourne encore une fois vers vous pour un problème que j'ai déja posé ici et à qui j'ai pas trouvé de réponse
J'éexplique mon pb
Mon problème est le suivant:
J'ai affaire à des lots et des sous lots qu'on peut distinguer par la catégorie
je m'explique: si la catégorie est de "PSOR" il s'agit d'un lot et si la catégory est de "PSOR" il s'agit d'un sous lot
Chaque sous lot à un lot parent unique, ils ont en commun les 1èrs 5 caractère du numéro de lot
ca veut dire.. par exemple si on a un lot dont le numéro de lot (num_lot) est L1234, ses sous lots sont de la forme L1234A, L1234B, L1234C..etc
Donc on peut remonter aux lot parents à partir du sous lots fils
Ma table contient parmi d'autre les colonnes suivantes
ma_colonne1, ma_colonne2, num_lot, category...etc
je veux récupérer les valeurs de ma_colonne1 et ma_colonne2
suivant la catégory
Si category="PSOF"====> j'affiche directement ma_colonne1, ma_colonne2
Si category="PSOR"====> il s'agit d'un sous lot, donc il faut que je remonte au lot parent pour afficher ma_colonne1, ma_colonne2
J'espère que je suis clair
Ma question est: est ce qu'on peut faire une seule reqûete pour afficher ma_colonne1, ma_colonne2
Et merci par avance
Je retourne encore une fois vers vous pour un problème que j'ai déja posé ici et à qui j'ai pas trouvé de réponse
J'éexplique mon pb
Mon problème est le suivant:
J'ai affaire à des lots et des sous lots qu'on peut distinguer par la catégorie
je m'explique: si la catégorie est de "PSOR" il s'agit d'un lot et si la catégory est de "PSOR" il s'agit d'un sous lot
Chaque sous lot à un lot parent unique, ils ont en commun les 1èrs 5 caractère du numéro de lot
ca veut dire.. par exemple si on a un lot dont le numéro de lot (num_lot) est L1234, ses sous lots sont de la forme L1234A, L1234B, L1234C..etc
Donc on peut remonter aux lot parents à partir du sous lots fils
Ma table contient parmi d'autre les colonnes suivantes
ma_colonne1, ma_colonne2, num_lot, category...etc
je veux récupérer les valeurs de ma_colonne1 et ma_colonne2
suivant la catégory
Si category="PSOF"====> j'affiche directement ma_colonne1, ma_colonne2
Si category="PSOR"====> il s'agit d'un sous lot, donc il faut que je remonte au lot parent pour afficher ma_colonne1, ma_colonne2
J'espère que je suis clair
Ma question est: est ce qu'on peut faire une seule reqûete pour afficher ma_colonne1, ma_colonne2
Et merci par avance
A voir également:
- SOS aux forts en sql
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
10 réponses
quand c'est un sous lot, as tu quelque chose dans les colonnes 1 et 2 ?
- si oui, pourquoi tu n'affiches pas directements les infos alors?
- si non, pourquoi n'y mets tu pas les informations du lot ?
- si oui, pourquoi tu n'affiches pas directements les infos alors?
- si non, pourquoi n'y mets tu pas les informations du lot ?
Bonjour splims,
Le code suivant devrait faire ce que tu veux
Le premier SELECT sélectionne tous les enregistrements de la catégorie PSOF, le deuxième SELECT sélectionne les deux colonnes du lot parent pour les enregistrements de la catégorie PSOR.
A plus
Le code suivant devrait faire ce que tu veux
SELECT num_lot , ma_colonne1 , ma_colonne2 FROM nomdetatable WHERE category = 'PSOF' UNION SELECT t1.num_lot , (SELECT ma_colonne1 , ma_colonne2 FROM nomdetatable t2 WHERE t2.num_lot = left(t1.num_lot,5)) FROM nomdetatable t1 WHERE t1.category = 'PSOR'
Le premier SELECT sélectionne tous les enregistrements de la catégorie PSOF, le deuxième SELECT sélectionne les deux colonnes du lot parent pour les enregistrements de la catégorie PSOR.
A plus
Merci pour la réponse mais la requête ne fait pas ce que je veux
En fait je travail sur le reporting, génération des rapports avec jasper
Je selectionne un batch (lot) et selon la catégorie de ce batch j'affiche sur le rapport les deux données ma_colonne1 et ma_colonne2
donc je sais d'avance la catégorie de mon batch, le pb c'est comment traiter les if dans une requête sql, y'a t'il un autre moyen pour résoudre ça?
Merci
En fait je travail sur le reporting, génération des rapports avec jasper
Je selectionne un batch (lot) et selon la catégorie de ce batch j'affiche sur le rapport les deux données ma_colonne1 et ma_colonne2
donc je sais d'avance la catégorie de mon batch, le pb c'est comment traiter les if dans une requête sql, y'a t'il un autre moyen pour résoudre ça?
Merci
Bonjour,
Quelle base de données utilises-tu ? Access , SQL Server , ....
En fonction de ta réponse je pourrai peut-être te proposer une solution.
A plus
Quelle base de données utilises-tu ? Access , SQL Server , ....
En fonction de ta réponse je pourrai peut-être te proposer une solution.
A plus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Peu importe que les colonnes contiennent ou pas des données s'il s'agit d'un sous lot, ce qui m'interesse c'est les informations relatives au lot père.
le lot il fo y remonter aprés si le lot séléctionné est un fils
donc y'aura une instruction du genre
quant je clique pour lancer mon rapport il ya ca
a partir du numéro du lo je cherche sa catégory
if( category='PSOR' then
chercher le lot parent correspendant
et chercher les colonnes 1 et 2
}
else
afficher directement les colonnes 1 et 2
le pb c'est que j'arrive pas à faire combiner tout ca en une seule requête
le lot il fo y remonter aprés si le lot séléctionné est un fils
donc y'aura une instruction du genre
quant je clique pour lancer mon rapport il ya ca
a partir du numéro du lo je cherche sa catégory
if( category='PSOR' then
chercher le lot parent correspendant
et chercher les colonnes 1 et 2
}
else
afficher directement les colonnes 1 et 2
le pb c'est que j'arrive pas à faire combiner tout ca en une seule requête
Bonjour splims,
Dans Oracle ( à partir de la version 9i) il existe l'instruction CASE, exemple de code
J'ai pas testé n'ayant pas Oracle sur mon PC.
A plus
Dans Oracle ( à partir de la version 9i) il existe l'instruction CASE, exemple de code
SELECT t1.num_lot, CASE t1.category WHEN 'PSOF' THEN t1.ma_colonne1 WHEN 'PSOR' THEN (select t2.ma_colonne1 from nomtable t2 where t2.num_lot = substr(t1.num_lot,1,5)) END , CASE t1.category WHEN 'PSOF' THEN t1.ma_colonne2 WHEN 'PSOR' THEN (select t2.ma_colonne2 from nomtable t2 where t2.num_lot = substr(t1.num_lot,1,5)) END FROM nomtable t1 WHERE t1.num_lot = numérodulotchoisi
J'ai pas testé n'ayant pas Oracle sur mon PC.
A plus
Bonsoir,
J'ai fait un truc en SQL/DB2 qui semble correspondre au problème si je l'ai convenablement compris. En tout cas ça peut aussi servir à préciser le problème :
Cordialement.
Cchristian.
J'ai fait un truc en SQL/DB2 qui semble correspondre au problème si je l'ai convenablement compris. En tout cas ça peut aussi servir à préciser le problème :
DROP TABLE TESTFOR ; CREATE TABLE TESTFOR ( num_lot CHAR (7) NOT NULL , column_1 CHAR (30) NOT NULL , column_2 CHAR (30) NOT NULL , categorie CHAR (4) NOT NULL , PRIMARY KEY (num_lot) ) ; INSERT INTO TESTFOR VALUES ('L1234', 'Column 1 lot PSOF L1234', 'Column 2 lot PSOF L1234', 'PSOF') , ('L1234A', 'Column 1 S/lot PSOR L1234A', 'Column 2 S/lot PSOR L1234A', 'PSOR'), ('L2234', 'Column 1 lot PSOF L2234', 'Column 2 lot PSOF L2234', 'PSOF') , ('L2234A', 'Column 1 S/lot PSOR L2234A', 'Column 2 S/lot PSOR L2234A', 'PSOR'), ('L2234B', 'Column 1 S/lot PSOR L2234B', 'Column 2 S/lot PSOR L2234B', 'PSOR'), ('L2234C', 'Column 1 S/lot PSOR L2234C', 'Column 2 S/lot PSOR L2234C', 'PSOR'), ('L3334', 'Column 1 lot PSOF L3334', 'Column 2 lot PSOF L3334', 'PSOF') , ('L3334A', 'Column 1 S/lot PSOR L3334A', 'Column 2 S/lot PSOR L3334A', 'PSOR'); SELECT * FROM TESTFOR ; -- Résultat de la requête : --NUM_LOT COLUMN_1 COLUMN_2 CATEGORIE --------- ------------------------------ ------------------------------ --------- -- L1234 Column 1 lot PSOF L1234 Column 2 lot PSOF L1234 PSOF -- L1234A Column 1 S/lot PSOR L1234A Column 2 S/lot PSOR L1234A PSOR -- L2234 Column 1 lot PSOF L2234 Column 2 lot PSOF L2234 PSOF -- L2234A Column 1 S/lot PSOR L2234A Column 2 S/lot PSOR L2234A PSOR -- L2234B Column 1 S/lot PSOR L2234B Column 2 S/lot PSOR L2234B PSOR -- L2234C Column 1 S/lot PSOR L2234C Column 2 S/lot PSOR L2234C PSOR -- L3334 Column 1 lot PSOF L3334 Column 2 lot PSOF L3334 PSOF -- L3334A Column 1 S/lot PSOR L3334A Column 2 S/lot PSOR L3334A PSOR ------------------------------------------------------------------------------------------------------------------- SELECT B.num_lot, A.column_1, A.column_2, B.categorie FROM TESTFOR A, TESTFOR B WHERE SUBSTR (B.num_lot, 1, 5) = A.num_lot ; ------------------------------------------------------------------------------------------------------------------- -- Résultat de la requête : -- NUM_LOT COLUMN_1 COLUMN_2 CATEGORIE -- ------- ------------------------------ ------------------------------ --------- -- L1234 Column 1 lot PSOF L1234 Column 2 lot PSOF L1234 PSOF -- L1234A Column 1 lot PSOF L1234 Column 2 lot PSOF L1234 PSOR -- L2234 Column 1 lot PSOF L2234 Column 2 lot PSOF L2234 PSOF -- L2234A Column 1 lot PSOF L2234 Column 2 lot PSOF L2234 PSOR -- L2234B Column 1 lot PSOF L2234 Column 2 lot PSOF L2234 PSOR -- L2234C Column 1 lot PSOF L2234 Column 2 lot PSOF L2234 PSOR -- L3334 Column 1 lot PSOF L3334 Column 2 lot PSOF L3334 PSOF -- L3334A Column 1 lot PSOF L3334 Column 2 lot PSOF L3334 PSOR COMMIT;--
Cordialement.
Cchristian.