[SQL Oracle]
ornellad
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
fiu -
fiu -
Bonjour, je suis actuellement en train d'écrire des requêtes SQL. J'ai une table possédant une trentaine de colonnes concernant des spécialités médicales. Quand une spécialité est celle du dossier étudié, la valeur de la colonne est -1 sinon c'est 0. J'ai créé dans une autre table un attribut lbspemed, pour récupérer une chaîne de caractères avec l'intitulé de la spécialité médicale du dossier. Pour cela je pensais utiliser la fonction CASE de cette façon :
SELECT CASE WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1 THEN v_appli_spemed.lbspemed='Aide Médicale'
END
FROM activite_specialiteapp, v_appli_spemed
WHERE activite_specialiteapp.iddoss=v_appli_spemed.iddoss;
Malheureusement SQL Developer me dit qu'il y a une erreur concernant un mot clé qui manquerait et j'avoue que là je sèche. Avez vous une idée de fonction ou de procédure que je pourrais utiliser sinon ? L'idée est donc de tester toutes les colonnes jusqu'à récupérer l'intitulé de celle qui vaut -1 !
Merci d'avance
SELECT CASE WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1 THEN v_appli_spemed.lbspemed='Aide Médicale'
END
FROM activite_specialiteapp, v_appli_spemed
WHERE activite_specialiteapp.iddoss=v_appli_spemed.iddoss;
Malheureusement SQL Developer me dit qu'il y a une erreur concernant un mot clé qui manquerait et j'avoue que là je sèche. Avez vous une idée de fonction ou de procédure que je pourrais utiliser sinon ? L'idée est donc de tester toutes les colonnes jusqu'à récupérer l'intitulé de celle qui vaut -1 !
Merci d'avance
A voir également:
- [SQL Oracle]
- Logiciel sql - Télécharger - Bases de données
- Requête sql pix - Forum Python
- Jointure sql ✓ - Forum MySQL
- Requete sql pix - Forum PHP
- Oracle america inc virus ✓ - Forum Virus
3 réponses
Salut,
CASE...WHEN ne fait pas d'affectation....mais est une sorte de mise en forme de la valeur retournée (pour que celle-ci soit peux etre plus comprehensible...)
CASE..... WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie' ne doit donc pas fonctionner....
CASE .....WHEN activite_specialiteapp.addictologie=-1 THEN 'Addictologie'
@+
CASE...WHEN ne fait pas d'affectation....mais est une sorte de mise en forme de la valeur retournée (pour que celle-ci soit peux etre plus comprehensible...)
CASE..... WHEN activite_specialiteapp.addictologie=-1 THEN v_appli_spemed.lbspemed='Addictologie' ne doit donc pas fonctionner....
CASE .....WHEN activite_specialiteapp.addictologie=-1 THEN 'Addictologie'
@+
Salut
normalement, le case sert à renvoyer une valeur, pas à faire des affectations comme tu l'essaies
donc ton case devrait plutôt ressembler à
CASE
WHEN activite_specialiteapp.addictologie=-1
THEN 'Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1
THEN 'Aide Médicale'
END specialite -- pour aliaser "specialite" l'expression CASE
...mais comme tu te rends compte que c'est pénible à manipuler, je te laisse assimiler tranquillement l'idée que tes spécialités ne devraient pas occuper x colonnes de ta table Activités. Elles devraient plutôt peupler une table SpécialitésMédicales qui pourrait être (cdSpeMed char(3), lbSpeMed varchar(30)).
Ainsi, le jour ou une 33ème spécialité apparaît (ie exopsychiatrie), tu n'auras pas à toucher à la structure d'Activités, à ton case ni à tous les autres bidules qui s'appuient dessus, il te suffirait de rajouter une ligne dans SpécialitésMédicales
normalement, le case sert à renvoyer une valeur, pas à faire des affectations comme tu l'essaies
donc ton case devrait plutôt ressembler à
CASE
WHEN activite_specialiteapp.addictologie=-1
THEN 'Addictologie'
WHEN activite_specialiteapp.aidemedicale=-1
THEN 'Aide Médicale'
END specialite -- pour aliaser "specialite" l'expression CASE
...mais comme tu te rends compte que c'est pénible à manipuler, je te laisse assimiler tranquillement l'idée que tes spécialités ne devraient pas occuper x colonnes de ta table Activités. Elles devraient plutôt peupler une table SpécialitésMédicales qui pourrait être (cdSpeMed char(3), lbSpeMed varchar(30)).
Ainsi, le jour ou une 33ème spécialité apparaît (ie exopsychiatrie), tu n'auras pas à toucher à la structure d'Activités, à ton case ni à tous les autres bidules qui s'appuient dessus, il te suffirait de rajouter une ligne dans SpécialitésMédicales