Bonjour,
j'ai une tranche de début et fin de période et une durée exple: d: 2006 f:2010 D: 4 Je cherche une astuce pour generer une ligne par année en fction de ma durée
quelqu'un a une idée ?
Merci
Bonjour,
j'ai une tranche de début et fin de période et une durée exple: d: 2006 f:2010 D: 4 Je cherche une astuce pour generer une ligne par année en fction de ma durée
quelqu'un a une idée ?
Merci
Bonjour,
J'ai pas très bien compris ce que tu cherches à obtenir...
1 lignes pour chaque année x durée ?
It isn't that they can't see the solution, it's that they can't see the problem.
Mes Articles et Traductions (Microstrategy, Css et Javascript)
Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.
je dirais en sql si c'est possible, sinon en pl/sql.
pour faire simple j'ai un debut , une fin du durée dans une table et je dois avoir dans une autre table pour un individu une ligne par année (autant que ma durée)
Un truc comme ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SQL>select 2006 + rownum - 1 2 from all_objects 3 where rownum <= 2010-2006 + 1; 2006+ROWNUM-1 ------------- 2006 2007 2008 2009 2010
oui tout a fait, je n'y avais pas pensé, je part la dessus.
Merci
Bon voici ce que j'ai fais, mais cela ne me parrait pas optimisé, quelqu'un peut il m'aider ?
Merci
CREATE OR REPLACE FORCE VIEW "REFERENTIEL"."LISTE_SESSION" ("EHP_UID", "VALEUR") AS
Select EHP_UID,
(CASE WHEN (INSTR(EHP_SESSION_DEBUT,'FACTURE')=1) THEN 'FACTURE'||(replace(EHP_SESSION_DEBUT,'FACTURE','') + rownum - 1)
ELSE TO_CHAR(EHP_SESSION_DEBUT + rownum - 1)
END) as valeur
FROM ECHANGE_PROGRAMME,all_objects
WHERE rownum <= replace(EHP_SESSION_FIN,'FACTURE','')-replace(EHP_SESSION_DEBUT,'FACTURE','') + 1
and EHP_UID like '9F5F%'
Et si pour une fois on tentait de faire du propre....
L'exemple que je donne fonctionne en 10g et 9i
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 create or replace type TNUM is table of number(10); Type created create or replace FUNCTION GEN_TAB (deb in number, fin in number) RETURN TNUM PIPELINED is BEGIN for f in deb..fin loop pipe row (f); end loop; END; / Function created select * from TABLE (GEN_TAB (2010,2016)); COLUMN_VALUE ------------ 2010 2011 2012 2013 2014 2015 2016 7 rows selected
je cherche une technique qui me permet de travailler avec une vue.
je m'explique, le debut et fin est variable suivant chacun de mes individus de ma table.
je peux avoir d=2004,f=2006 pour x puis d=2003,f=2007 pour y ect ..... ce qui devrait me donner pour x une ligne pour 2004,2005,2006 pour y une ligne pour 2003,2004,2005,2006,2007.
Le
select 2006 + rownum - 1
FROM all_objects AO
WHERE rownum <= 2010-2006 + 1;
est une bonne base mais si je fais une jointure sur ma table pour remplacer les valeurs par mes entrées j'explose le temps d'exec. il me manque qqle chose.
Merci
Bonjour,
N'y aurait il pas une solution avec une requete SQL récursive ?
Merci
Pour ne pas exploser les temps de réponses, il faut faire quelque chose comme cela :
Ainsi tu vas éviter un produit cartésien sur des milliers de lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select ... from maTable, (select 2006 + rownum - 1 annee FROM all_objects AO WHERE rownum <= 2010-2006 + 1) annees where ...
Il est néanmoins vrai que cette méthode n'est d'une part pas satisfaisant pour les puristes et d'autre part pas sans incidence sur les temps de réponse. Si ton nombre d'années est limité, peut-être peux-tu attaquer une vue plus petite![]()
Partager