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

Souci d'élaboration de requete avec Oracle 8

1 réponse
Avatar
David
Bonsoir,

J'ai une base Oracle 8 et j'ai un souci d'élaboration de requete.

La table TABLE1 est la table principale, et je récupère des infos des tables
TABLE2 et TABLE3.

Mon soucis est dans la clause WHERE :

TABLE1.CODE_F = TABLE3.CODE_FAMILLE

Ce code (sous la forme d'une chaine alphanumérique) me permet de récupérer
des libellés mais pour les 8 caractères du champs TABLE1.CODE_F.
Or, ce que je souhaite c'est trouver les libellés en fonction des 6 premiers
caractères seulement.

J'ai testé différentes fonctions de troncage de chaine mais sans résultat.

Voici ma requète actuelle :

SELECT TABLE1.CODE, TABLE2.DATE,
TABLE2.NOM,
TABLE2.QTE_FACT * 100 / TABLE2.COEFF_FACTUR
AS QT,
TABLE2.PRIX_BRUT / 1000 * (1 - TABLE2.REMISE_1
/ 10000) * (1 - TABLE2.REMISE_2 / 10000)
* TABLE2.DEVISE / 10000 * TABLE2.STOCK_FACTUR
/ 10000 AS PUF, TABLE3.LIBELLE AS FAMILLE
FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.CODE = TABLE2.CODE AND
TABLE1.CODE_F = TABLE3.CODE_FAMILLLE AND
(TABLE2.DATE > 20030000) AND
(TABLE2.DATE < 20040000)
ORDER BY TABLE1.CODE

Comment je peux faire ???

Est ce au moins possible ?

Cordialement.

1 réponse

Avatar
Fred BROUARD - SQLpro
Voila, avec en prime un BETWEEN pour ta fourchette de date !

A +

SELECT TABLE1.CODE, TABLE2.DATE,
TABLE2.NOM,
TABLE2.QTE_FACT * 100 / TABLE2.COEFF_FACTUR AS QT,
TABLE2.PRIX_BRUT / 1000 * (1 - TABLE2.REMISE_1 / 10000)
* (1 - TABLE2.REMISE_2 / 10000)
* TABLE2.DEVISE / 10000
* TABLE2.STOCK_FACTUR
/ 10000 AS PUF,
TABLE3.LIBELLE AS FAMILLE
FROM TABLE1, TABLE2, TABLE3
WHERE SUBSTR(TABLE1.CODE, 1, 6) = SUBSTR(TABLE2.CODE, 1, 6)
AND TABLE1.CODE_F = TABLE3.CODE_FAMILLLE
AND TABLE2.DATE BETWEEN TO_DATE(20030101) AND TO_DATE(20040101)
ORDER BY TABLE1.CODE

David a écrit:
Bonsoir,

J'ai une base Oracle 8 et j'ai un souci d'élaboration de requete.

La table TABLE1 est la table principale, et je récupère des infos des tables
TABLE2 et TABLE3.

Mon soucis est dans la clause WHERE :

TABLE1.CODE_F = TABLE3.CODE_FAMILLE

Ce code (sous la forme d'une chaine alphanumérique) me permet de récupérer
des libellés mais pour les 8 caractères du champs TABLE1.CODE_F.
Or, ce que je souhaite c'est trouver les libellés en fonction des 6 premiers
caractères seulement.

J'ai testé différentes fonctions de troncage de chaine mais sans résultat.

Voici ma requète actuelle :

SELECT TABLE1.CODE, TABLE2.DATE,
TABLE2.NOM,
TABLE2.QTE_FACT * 100 / TABLE2.COEFF_FACTUR
AS QT,
TABLE2.PRIX_BRUT / 1000 * (1 - TABLE2.REMISE_1
/ 10000) * (1 - TABLE2.REMISE_2 / 10000)
* TABLE2.DEVISE / 10000 * TABLE2.STOCK_FACTUR
/ 10000 AS PUF, TABLE3.LIBELLE AS FAMILLE
FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.CODE = TABLE2.CODE AND
TABLE1.CODE_F = TABLE3.CODE_FAMILLLE AND
(TABLE2.DATE > 20030000) AND
(TABLE2.DATE < 20040000)
ORDER BY TABLE1.CODE

Comment je peux faire ???

Est ce au moins possible ?

Cordialement.





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************