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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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: ******************
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
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
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: ******************