2010-07-02 3 views
3

Je suis confronté à un problème lors de l'exécution de requêtes avec l'instruction CASE. En fonction de ma condition, (par exemple, la longueur), je veux exécuter une instruction SQL différente.Comment exécuter des instructions SELECT différentes en fonction d'un CAS

exemple de requête problématique est la suivante:

select case 
    when char_length('19480821') = 8 
     then select count(1) from Patient 
    when char_length('19480821')=10 
     then select count(1) from Doctor 
end 

Exception:

[Erreur] lignes de script: 1-5 --------------- -----------
Syntaxe incorrecte près du mot-clé 'select'.
Msg: 156, Niveau: 15, État: 2
Serveur: sunsrv4z7, Ligne: 2

Je ne suis pas en mesure de corriger la syntaxe. Je reçois la chaîne pour char_length en entrée de l'utilisateur. Comment puis-je déclencher des requêtes en fonction de certaines conditions? CASE est-il le bon choix? Ou dois-je utiliser autre chose.

Répondre

1
select 
    case when char_length('19480821')=8 then (select count(1) from Patient) 
     when char_length('19480821')=10 then (select count(1) from Doctor) 
    end 

Le problème est que dans vos déclarations « Sélectionnez » imbriquées vous manque parenthèses d'ouverture et de fermeture :)

+1

vous pouvez déplacer les parenthèses d'ouverture dans la deuxième clause then un mot juste. – potatopeelings

+1

encore il y a erreur de syntaxe parce que dans la ligne thrid alors est à l'intérieur de la tranche –

+0

merci, fixé: o – VoodooChild

4

Il suffit de mettre l'ouverture et le support de clôture autour de détermination de l'instruction select vous problème

select 
    case when 
     char_length('19480821')=8 then 
      (select count(1) from Patient) 
     when 
     char_length('19480821')=10 then 
      (select count(1) from Doctor) 
     end 
+0

+1 lol, vous battre à lui !!! – VoodooChild

+0

ouais .................. –

2

S'il vous plaît, notez que ce n'est pas une déclaration de cas, c'est un cas d'EXPRESSION. En entourant les requêtes entre parenthèses, vous les convertissez (syntaxiquement) en valeurs.

Ceci est similaire en principe à une sous-requête, comme « sélectionner le nom du médecin où le salaire = (choisir un maximum (salaire) du docteur) »

Questions connexes