calcul de pourcentages d'une occurence [DB2] - SQL/NoSQL - Programmation
Marsh Posté le 06-01-2010 à 16:37:45
là ta requête elle doit toujours te retourner 1 (vu que c'est la même sous-requete) donc je suis sceptique du resultat produit sur oracle
Maintenant moi j'écrirai plutot la requete comme ça (et ça doit marcher sous db2):
Code :
|
Marsh Posté le 06-01-2010 à 16:49:12
Avant tout merci pour la réponse.
Le problème est qu'elle me retourne 0.
En fait je souhaite une réponse du type :
Code :
|
Voici le retour de la requete sous oracle :
Code :
|
Marsh Posté le 06-01-2010 à 16:59:25
Je dirais qu'en fait tu as un problème d'integer VS decimal si ta requête te remonte partout 0.
le *100.00 intervient trop tard car l'opération de division a été effectué uniquement avec des integers et le resultat en est alors également un (donc 0).
Essaye juste en déplacement le *100.00 comme ça
Code :
|
edit:
sinon cast les counts en decimaux
Marsh Posté le 06-01-2010 à 17:09:08
en fait je n'ai même pas de 0 en tant que réponse. Il refuse d'exécuter la requête sans me sortir de code d'erreur.
J'avais tenté en déplaçant le *100.00 mais sans meilleur succès
Marsh Posté le 07-01-2010 à 11:50:14
sans plus d'infos c'est difficile de t'aider ...
Marsh Posté le 07-01-2010 à 18:45:04
Salut,
J'ai fait ça vite fait sous Oracle :
SELECT DISTINCT MT.Code, DRV.NB_OCC / (SELECT COUNT(*) FROM MATABLE MTA WHERE MTA.TYPE = 'L' AND MTA.Etape = 2)
FROM MATABLE MT
INNER JOIN
(
SELECT MT.code AS CODE, COUNT(*) AS NB_OCC
FROM MATABLE MT
WHERE MT.TYPE = 'L' AND MT.Etape = 2
GROUP BY MT.CODE
)
DRV ON DRV.code = MT.Code
WHERE MT.TYPE = 'L' AND MT.Etape = 2
Bon courage,
Marsh Posté le 08-01-2010 à 11:18:24
Tibar a écrit : Salut, |
Salut à toi et merci pour le coup de main.
Voici la réponse sous DB2 :
Sorry, a system error occurred. Your command may not have been executed.
Explanation:
DSQ10497 Non end-user SQLCODE returned from DBM. SQLCA is as follows:
SQLCODE=-4700/ SQLERRM=/ SQLERRP=DSNXOCNR/ SQLERRD(HEX)=FFFFFF9C
00000000 00000000 FFFFFFFF 00000000 00000000/ SQLWARN= /
SQLSTATE=56038/ *** CMD=RUN
Comme DB2 n'est pas ma spécialité je ne sais pas trop à quoi ceci correspond.
Marsh Posté le 08-01-2010 à 11:57:03
Ton problème semble venir du fait que DB2 n'arrive pas à faire une sous-requête.
Alors deux solutions possible :
- BD2 c'est d'la merde, en retard de 20 ans sur le plus pourri des autres SGBD (ça c'est très fortement possible)
- DB2 à une syntaxe particulière pour faire des subquery (plus probable)
Marsh Posté le 08-01-2010 à 11:59:48
A priori, c'est un mix des deux : sous-requête uniquement dans le FROM et obligatoirement alisées (suppositions par rapport à ce que j'ai pu trouver)
Marsh Posté le 08-01-2010 à 15:12:18
Bon, après quelques galères, je peux te proposer ça : (je n'ai pas renommé mes tables, ça te donnera mes initiales, mais j'ai trop peur des alias ;-) :
SELECT DISTINCT XB.Code, DRV.NB_OCC / DRVX.Tot
FROM xba_test XB
INNER JOIN
(
SELECT XB.code AS CODE, COUNT(*) AS NB_OCC
FROM xba_test XB
WHERE XB.TYPE = 'L' AND XB.Etape = 2
GROUP BY XB.CODE
)
DRV ON DRV.code = XB.Code
INNER JOIN
(
SELECT DISTINCT XB.Code, DRV.tot
FROM xba_test XB
INNER JOIN
(
SELECT COUNT(*) AS TOT
FROM xba_test XB
WHERE XB.TYPE = 'L' AND XB.Etape = 2
) drv ON 1 = 1
) DRVX ON DRVX.Code = XB.Code
WHERE XB.TYPE = 'L' AND XB.Etape = 2
si la jointure ON 1 = 1 ne passe, il y a peut être une autre syntaxe, mais chez moi ça passe (sous Oracle)...
Bon courage
Marsh Posté le 08-01-2010 à 16:39:03
Je vais tenter lundi, j'ai plus la main sur la base pour le moment.
Effectivement sous Oracle tout fonction mais DB2, c'est vraiment très particulier ...
Marsh Posté le 08-01-2010 à 16:46:58
Ok, sinon en 2 fois, la problématique étant de sortir le total autant de fois qu'il y a de lignes répondant au critère...
Une requête qui initialise une variable avec le nombre de lignes qui répondent au critère, et une requête qui sort le nombre d'occurrence de chaque Code (déjà faite)...
Bon courage,
Marsh Posté le 06-01-2010 à 15:36:18
Saluts à tous,
Bon voilà je galère un peu sous DB2 avec une requête qui fonctionne bien sous Oracle.
Je cherche à calculer le pourcentage de caque type de "code_reponse" pour les enregistrements donc le type_trace est "L" et le num_etape "2".
Voila un extrait de la structure de maTable
Voici la requête qui fonctionne sous une base oracle, mais sous DB2 elle ne veut pas s'executer.
Merci à vous pour votre aide
---------------
_.·´¯)Mon feedback(¯`·._ || What shall we die for ?