IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Génération d'enregistrement factices dans une requête


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Points : 74
    Points
    74
    Par défaut Génération d'enregistrement factices dans une requête
    Bonjour,

    Petite question toute bête, qui, à la réflexion me semble de moins en moins évidente.
    Imaginons une table dans laquelle on a une colonne DATE_COMPT de type DATE et une autre de type COMPT de type NUMBER. Dans cette table, chaque date est associé un comptage (par exemple pour un inventaire, exemple completement inventé pour se mettre en situation).
    Imaginons maintenant que dans cette table j'ai deux enregistrement :
    - 1er enreg : DATE_COMPT = 01/08/2007 et COMPT = 2
    - 2e enreg : DATE_COMPT = 07/08/2007 et COMPT = 7
    Maintenant la question est la suivante : imaginons qu'un état soit sensé reporter le comptage relevé pour chaque jour, est-il possible de créer une requête SQL qui me présentera les deux enregistrements présentés plus haut, mais qui sera également capable de me donner un comptage à "0" pour toutes les dates comprises entre le 01/08/2007 et le 07/08/2007 (n'apparaissant pas dans la table) ?
    J'avoue avoir du mal à voir comment cela serait possible mais des fois Oracle n'est pas à un miracle près
    D'avance merci pour vos idées !

    PS : ca fait un moment que je n'ai pas posté sur ce forum (que je consulte malgré tout très fréquemment) alors veuillez m'excuser si je n'ai pas appliqué de nouvelles règles apparues depuis que je vous fait des infidelités

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    on a dû faire ça pour un calendrier... recherche CONNECT BY PRIOR dans le forum

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select date_compt, compt 
    from t
    model
    dimension by (
      date_compt)
    measures (
      compt)
    ignore nav rules  (
      compt[for date_compt from date '2007-08-01' to 
        date '2007-08-07' increment 1]=compt[cv()]
    );
    merci de toujours préciser la version!

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    rhoooo là il y a maitrise

    moi qui pensais ne pas être mauvais en SQL, la 10G a sacrément tendance à me remettre à ma place

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 119
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    merci de toujours préciser la version!
    J'avais prévenu que je risquais d'oublier les règles du forum Désolé

    en tout cas chapeau pour la requête, j'avais jamais eu l'occasion de voir l'utilisation de la clause MODEL. Mais d'après ce que je lis dans la doc, c'est tout beau tout neuf en 10g, ce qui veut dire qu'en 9i (environnement sur lequel je travaille) je n'ai pas de fonction équivalente ?

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create or replace type date_t is object (date_compt date);
    /
    create or replace type date_tt is table of date_t;
    /
    create or replace function f(from_date date, to_date date) 
      return date_tt pipelined is
    begin
      for i in (from_date-date '2000-01-01')..(to_date-date '2000-01-01') loop
        pipe row(date_t(date '2000-01-01'+i));
      end loop;
    end;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * 
    from t right join table(f(date '2007-08-01',date '2007-08-07')) 
      using (date_compt) ;

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    avec des bornes dynamiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from t right join table(
      f((select min(date_compt) from t),(select max(date_compt) from t))) 
      using (date_compt) ;

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    pour la clause model, avec des bornes dynamique, il faut employer une référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create table t as (
      select date '2007-08-01' date_compt, 2 compt from dual 
      union all select date '2007-08-07',7 from dual);
    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
     
    select * 
    from t
    model
    reference r on 
      ( select 1 x, min(date_compt) m1, max(date_compt) m2 from t) 
      dimension by (x) measures (m1,m2)
    main p
    dimension by (
      date_compt)
    measures (
      compt)
    ignore nav rules  (
      compt[for date_compt from m1[1] to m2[1]
        increment 1]=compt[cv()]
    )
    order by 1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DATE_COMP      COMPT
    --------- ----------
    01-AUG-07          2
    02-AUG-07          0
    03-AUG-07          0
    04-AUG-07          0
    05-AUG-07          0
    06-AUG-07          0
    07-AUG-07          7

Discussions similaires

  1. Exclure des enregistrements vide dans une requête sql
    Par beegees dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/03/2009, 19h42
  2. Réponses: 1
    Dernier message: 10/01/2007, 14h24
  3. [MySQL] nombre d'enregistrements maj dans une requête update
    Par erwan.bodere dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/06/2006, 16h11
  4. Réponses: 3
    Dernier message: 04/05/2006, 13h00
  5. Exclure des enregistrements dans une requête
    Par r@phy dans le forum Access
    Réponses: 3
    Dernier message: 29/03/2006, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo