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

Langage SQL Discussion :

Création d'une vue avec un case


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut Création d'une vue avec un case
    Bonjour,

    Je dois créer une vue, avec pour certains champs des "case" dépendant des valeurs d'autres champs. En gros :
    Par exemple :
    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
    CREATE OR REPLACE VIEW "maVue" ("ID_RTN","TYPE_RTN")
         AS (SELECT
    	-- 1 -- ID_RTN
    	(select ...)  as ID_RTN,
    	-- 2 -- TYPE_RTN
    	(SELECT case when 
    		ID_RTN = 1
    	then
    		'A'
    	else 
    		NULL
    	end FROM dual) as TYPE_RTN
    FROM
    	maTable
    WHERE 
    	{autres conditions)
    mais là j'ai l'erreur
    SQL Error: ORA-00904: "ID_RTN": invalid identifier
    00904. 00000 - "%s: invalid identifier"
    Puisqu'il ne connait pas (encore) cet alias de colonne, j'ai voulu lui redonner tout le select qui permet de remplir cette colonne...
    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
    CREATE OR REPLACE VIEW "maVue" ("ID_RTN","TYPE_RTN")
         AS (SELECT
    	-- 1 -- ID_RTN
    	(select ...)  as ID_RTN,
    	-- 2 -- TYPE_RTN
    	(SELECT case when 
    		(select ...) = 1
    	then
    		'A'
    	else 
    		NULL
    	end FROM dual) as TYPE_RTN
    FROM
    	maTable
    WHERE 
    	{autres conditions)
    mais là non plus : le select peut me renvoyer plusieurs lignes, je n'ai pas de moyen de lui préciser que je veux "la valeur du champ pour la ligne correspondant à celle sur laquelle on est déjà" (si vous me dites que c'est pas clair, je ne me vexerai pas...).

    Il y a-t-il une solution ?! J'aurais aimé ne pas avoir à passer par une procédure stockée...

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Je tente ma chance : pas de parenthèse après le
    CREATE VIEW xxx AS

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Salut !

    Je tente ma chance : pas de parenthèse après le
    CREATE VIEW xxx AS
    Hééénon, ça marche sans mais ça gênait pas - mais merci hein

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Hmmm, zut !

    Bon par contre, tu ne peux pas réutiliser dans le select, "id_rtn" que tu définis dans le même select ! Il faut te retaper tout la formule pour y faire référence... ou alors utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create view ... as with t as (...) select * from ..
    (pour commencer par définir tes trucs avant de les réutiliser. Tu vois ce que je veux dire ?)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Hmmm, zut !
    Bon par contre, tu ne peux pas réutiliser dans le select, "id_rtn" que tu définis dans le même select ! Il faut te retaper tout la formule pour y faire référence... ou alors utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create view ... as with t as (...) select * from ..
    (pour commencer par définir tes trucs avant de les réutiliser. Tu vois ce que je veux dire ?)
    Alors je crois que je vois mais que je retape tout le biniou ou que je définisse mon "id_rtn" avant, j'ai toujours le souci que le biniou sort plusieurs lignes et qu'il ne comprend pas que c'est la même ligne qu'il faut qu'il regarde.
    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
    CREATE OR REPLACE VIEW "maVue" ("ID_RTN","TYPE_RTN")
         AS (SELECT
    	-- 1 -- ID_RTN
    	(SELECT ...)  AS ID_RTN,
    	-- 2 -- TYPE_RTN
    	(SELECT case when 
    		(SELECT ...) = 1
    	then
    		'A'
    	else 
    		NULL
    	end FROM dual) AS TYPE_RTN
    FROM
    	maTable
    WHERE 
    	{autres conditions)
    Si mon biniou bleu me sort 3 lignes...

    euh

    en fait finalement je n'ai plus besoin du select en question du coup mon problème ne se pose plus... donc on saura jamais
    Désolée et merci hein...

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Citation Envoyé par Pauline65 Voir le message
    Si mon biniou bleu me sort 3 lignes...
    C'est un problème en soi, quelle que soit la manière de l'implémenter !

    Attends, laisse moi deviner ce qui va se passer... Oracle, Oracle, dis-moi l'avenir :

    ORA-01427 : single-row subquery returns more than one row

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Création d'une liste avec cases à cocher
    Par boroti dans le forum Modélisation
    Réponses: 2
    Dernier message: 17/06/2015, 17h27
  2. Réponses: 8
    Dernier message: 10/12/2007, 16h27
  3. ORACLE 9.2 : Création d'une vue avec plusieurs clauses WHERE
    Par soffinette dans le forum Administration
    Réponses: 4
    Dernier message: 01/02/2007, 10h51
  4. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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