Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 15h47   #1
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
Par défaut Format d'un champ calculé

Bonjour,

Je cherche à formatter un champ numérique calculé à l'affichage sur SQLDEVELOPPER pour ensuite l'exporter sur Excel et faire des calculs.
Je suis sur Oracle 10g.

J'ai codé ceci:
Code :
to_char((al.MNT_TOTAL_HT * ucv.ratio_u1_u2 / (al.tot_cmde * uc.ratio_u1_u2) ),'99990,000000')
Cela me donne un résultat égal à 0.000000.

Lorsque je code:
Code :
al.MNT_TOTAL_HT * ucv.ratio_u1_u2 / (al.tot_cmde * uc.ratio_u1_u2)
je n'ai pas le même résultat.

Je souhaiterai avoir le 2ème résultat avec un formattage correct correspondant au 1er.

Merci d'avance.
Julien.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 16h01   #2
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

http://download.oracle.com/docs/cd/B...004.htm#i34570

Que donne :

Code :
1
2
 
al.MNT_TOTAL_HT * ucv.ratio_u1_u2 / (al.tot_cmde * uc.ratio_u1_u2)
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 18h21   #3
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
Bonjour,

Je ne parviens pas à formatter le champ calculé tmp.cout_unit avec 6 chiffres avant la virgule et 6 chiffres après. Je souhaite également que mon séparateur de décimales soit la virgule.

Ma requête SQL:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
SELECT tmp.id_article, tmp.reference, tmp.cout_unit AS cout_unit, tmp.num_achat
FROM 
  (SELECT a.id_article, al.MNT_TOTAL_HT / (al.NB_LOT_CMDE * al.qte_cmde * al.lg_cmde  AS cout_unit, a.reference, b.num_achat
FROM t_article a, V_RAPPRO_BL_ACHAT b, t_achat_ligne al
WHERE a.id_groupe_article IN (1,3)
  AND a.id_article = b.id_article
  AND al.id_achat_ligne = b.id_achat_ligne
  AND  a.id_unite_stock = al.id_unite_cmde                          
  AND  al.id_unite_cmde <> al.id_unite_tot_cmde  
union 
SELECT a.id_article, al.MNT_TOTAL_HT / al.tot_cmde AS cout_unit, a.reference, b.num_achat
FROM t_article a, V_RAPPRO_BL_ACHAT b, t_achat_ligne al
WHERE a.id_groupe_article IN (1,3)
  AND a.id_article = b.id_article
  AND al.id_achat_ligne = b.id_achat_ligne
  AND  a.id_unite_stock =  al.id_unite_tot_cmde
  AND al.id_unite_tot_cmde <> al.id_unite_cmde
union 
SELECT a.id_article, al.MNT_TOTAL_HT / al.tot_cmde  AS cout_unit, a.reference, b.num_achat
FROM t_article a, V_RAPPRO_BL_ACHAT b, t_achat_ligne al
WHERE a.id_groupe_article IN (1,3)
  AND a.id_article = b.id_article
  AND al.id_achat_ligne = b.id_achat_ligne
  AND  a.id_unite_stock =  al.id_unite_tot_cmde
  AND al.id_unite_tot_cmde = al.id_unite_cmde
union  
SELECT   art.id_article, a.MNT_TOTAL_HT / (a.NB_LOT_CMDE * a.qte_cmde * a.lg_cmde)  AS cout_unit, a.reference, b.num_achat
  FROM  t_article art, V_RAPPRO_BL_ACHAT b, t_achat_ligne a  
  WHERE a.id_achat_ligne = b.id_achat_ligne
   AND b.id_article   = art.id_article   
   AND    art.id_unite_stock = 1461
   AND    a.id_unite_cmde    = 1      
   AND    art.id_unite_stock <>     a.id_unite_tot_cmde
union 
SELECT   art.id_article, a.MNT_TOTAL_HT * c.ratio_u1_u2/ (a.NB_LOT_CMDE * a.qte_cmde * lg_cmde)  AS cout_unit, a.reference, b.num_achat
  FROM  t_article art, unit_conv c,V_RAPPRO_BL_ACHAT b, t_achat_ligne a
  WHERE c.id_unit_abaque = art.id_unite_abaque    
   AND  a.id_achat_ligne = b.id_achat_ligne
   AND  b.id_article     = art.id_article
   AND  c.id_unit2       = a.id_unite_cmde 
   AND  c.id_unit1       = case art.id_unite_stock 
                           when 1461 then 1
                           else 
                           art.id_unite_stock 
                           end
   AND    art.id_unite_stock <>     a.id_unite_cmde
   AND    art.id_unite_stock <>     a.id_unite_tot_cmde
union   
SELECT   art.id_article, a.MNT_TOTAL_HT * 1000 / a.tot_cmde  AS cout_unit, a.reference, b.num_achat
  FROM  t_article art, V_RAPPRO_BL_ACHAT b, t_achat_ligne a 
  WHERE a.id_achat_ligne = b.id_achat_ligne
   AND b.id_article   = art.id_article   
   AND    art.id_unite_stock = 2
   AND    a.id_unite_cmde    = 4      
   AND    a.id_unite_cmde    = a.id_unite_tot_cmde   
union 
SELECT   art.id_article, a.MNT_TOTAL_HT / (1000 * a.tot_cmde) AS cout_unit, a.reference, b.num_achat
  FROM  t_article art, V_RAPPRO_BL_ACHAT b, t_achat_ligne a  
  WHERE a.id_achat_ligne = b.id_achat_ligne
   AND b.id_article   = art.id_article   
   AND    art.id_unite_stock = 4
   AND    a.id_unite_cmde    = 2      
   AND    a.id_unite_cmde    = a.id_unite_tot_cmde
union
SELECT a.id_article,al.MNT_TOTAL_HT * ucv.ratio_u1_u2 / (al.tot_cmde * uc.ratio_u1_u2) AS cout_unit, a.reference, ach.num_achat
FROM t_article a, unit_conv uc, V_RAPPRO_BL_ACHAT b, t_achat_ligne al, unit_conv ucv, t_achat ach
 WHERE a.id_article = b.id_article
   AND a.id_unite_stock = uc.id_unit2
   AND al.id_achat_ligne = b.id_achat_ligne
   AND al.id_unite_cmde = uc.id_unit1
   AND a.id_unite_abaque = ucv.id_unit_abaque
   AND al.id_achat = ach.id_achat) tmp
Merci d'avance.
Julien.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 13h47   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 926
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 926
Points : 4 547
Points : 4 547
la virgule, c'est le séparateur international des milliers

donc

to_char('...','99990.000000')

ou si tu veux qqch de local

to_char('...','99990D000000')

avec D{ot} comme séparateur décimal
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h27.


 
 
 
 
Partenaires

Hébergement Web