Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1373 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL/SAS] Requête qui ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL/SAS] Requête qui ne fonctionne pas

n°2274956
$temp
Posté le 03-02-2016 à 13:35:18  profilanswer
 

Bonjour,  
 
Voici mon problème, que je vais essayer de vous exposer le plus clairement possible :
 
J'ai une table qui contient des infos du format suivant :

|    q    | val_n1 | val_n2 | ... | val_n33 |
| 0.00001 |        |        |     |         |
|   ...   |        |        |     |         |
|    1    |        |        |     |         |


 
J'ai en entrée :
- a : la valeur que je dois chercher
- b : la colonne "val_nx" dans laquelle je dois chercher
 
Je veux trouver dans la colonne b la valeur la plus proche de a, et récupérer la valeur de q correspondant à cette ligne.
 
Après moult essais, voici ce à quoi j'arrive pour le moment, et qui ne fonctionne pas  [:tinostar]  
 

%macro test(a,b);
proc sql;
select q
from etape01.table_q
where abs(&b-&a)=(select min(abs(&b-&a)) from etape01.table_q)
quit;
%mend test;


 
Ce code me renvoie l'erreur suivante :
 

Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, EQT, GE, GET, GROUP, GT, GTT, HAVING, LE, LET, LT, LTT, NE, NET, OR, ORDER, ^=, |, ||, ~=.


 
Je suppose qu'il y a un truc évident qui m'échappe : l'un d'entre vous pourrait-il m'aider à faire fonctionner ma macro ?
 
Merci d'avance à ceux qui pourront m'aider :jap:


Message édité par $temp le 03-02-2016 à 13:37:03
mood
Publicité
Posté le 03-02-2016 à 13:35:18  profilanswer
 

n°2274973
rufo
Pas me confondre avec Lycos!
Posté le 03-02-2016 à 15:38:57  profilanswer
 

Les & ne doivent pas convenir :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2274977
$temp
Posté le 03-02-2016 à 16:01:08  profilanswer
 

J'ai pourtant l'impression que ça convient bien : c'est bien interprété, et par exemple si j'exécute la requête incluse seule, elle fonctionne.
 
Mes messages d'erreur me mettent le code interprété, et il est bon :
(Je l'appelle 3 fois avec des valeurs indiquées en dur pour voir si ça marche, et ces valeurs sont bien reprises)
 
Toutes mes excuses mais reho.st est mort, donc je passe par HostingPics (vignette cliquable) :
http://img11.hostingpics.net/thumbs/mini_42869020160203155716.png
 
J'ai l'impression qu'il y a (encore) une particularité liée à SAS que j'ignore...

n°2274978
rufo
Pas me confondre avec Lycos!
Posté le 03-02-2016 à 16:05:41  profilanswer
 

Je connais pas SAS, désolé.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2274979
$temp
Posté le 03-02-2016 à 16:07:25  profilanswer
 

Moi non plus, et là est bien mon problème :o
 
Merci quand même, ça me confirme au moins qu'il n'y a pas une énormité dans ma requête que j'aurais ratée :jap:

n°2275018
Chelmi18
Posté le 04-02-2016 à 09:26:40  profilanswer
 

Si c'est du "vrai" SQL, quelque chose m'échappe : tu fais (B - A) où B est une colonne et A une valeur ?
 
Tu ne soustrairais pas des choux et des carottes ?

n°2275019
rufo
Pas me confondre avec Lycos!
Posté le 04-02-2016 à 09:38:07  profilanswer
 

Je pense qu'il veut dire que b désigne une valeur de la colonne val_nx.
Donc, il calcule pour chaque enregistrement dans la table table_q, (val_nx - a).
 
Edit : cela dit, ça serait pas plus simple de faire : select q, (b-a) as Diff from etape01.table_q ORDER BY Diff Limit 0, 1
Limit 0, 1 c'est pour avoir juste le premier enregistrement ayant le Diff le plus faible. Ca évite la sous-requête.


Message édité par rufo le 04-02-2016 à 09:40:12

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2275026
$temp
Posté le 04-02-2016 à 12:49:30  profilanswer
 

Chelmi18 > En fait, &b est effectivement le nom de la colonne et &a une valeur, mais cette valeur &a est interprétée comme une matrice de dimension (1,n) qui contiendrait tout le temps la meme valeur. Ca fonctionne quand les requêtes ne sont pas imbriquées.
 
rufo > J'ai fait des tests avec LIMIT, je voulais faire des SORT BY puis récupérer mon minimum avec un LIMIT... sauf que LIMIT n'est pas reconnu par SAS (quel logiciel en mousse, au prix qu'il coute... :o) Il faut le préciser via un outobs= mais qui s'applique à toute la proc, ça ne m'arrange pas du coup.
 
Je crois que je vais devoir forcément créer deux proc SQL à la suite pour réussir à faire mon truc.


Message édité par $temp le 04-02-2016 à 12:50:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL/SAS] Requête qui ne fonctionne pas

 

Sujets relatifs
Requête possible?Requête SQL avec liaison multi-tables
Instance qui ne fonctionne pas[JQUERY]Problème requête ajax en GET via PHP
[SQL] Requètes imbriquées ?Résultat d'une requête différent entre phpmyadmin et l'affichage
Aide pour finir - requete SQL avec search avec jointuresinterroger plusieurs tables en une seule requete
[SQL Server / Cobol] Requête sur Varchar 
Plus de sujets relatifs à : [SQL/SAS] Requête qui ne fonctionne pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR