Aide pour requete SQL

Aide pour requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 03-04-2012 à 09:34:50    

Hello Tout le monde,
 
Petit soucis avec une requête sql .. je sèche un peu, si vous avez une idée.
J'ai un table remplie de cette façon :
IDENTIF   QUESTION     HEURE   REPONSE    TYPE
0001          0001          111245   0001          A
0001          0001          081130   0001          A
0001          0002          031220   0003          A
0001          0003          134110   0001          C
0002          0001          111245   0001          A
0002          0001          081130   0001          A
0002          0002          031220   0003          A
0002          0003          134110   0001          C
 
J'aimerais avoir des lignes de ce type (avec type = A)
IDENTIF    REPONSE1    REPONSE2
 
J'ai essayé avec des left join .. mais c'est trop lourd pour le pocket pc.
 
Pour le moment, j'en suis la
select MAX(HEURE) as HEURE,CASE MIN(QUESTION) WHEN '001' THEN ??REPONSE?? else 'X' end REPONSE1,CASE MAX(QUESTION) WHEN '002' THEN ??REPONSE?? else 'X' end REPONSE2 from TABLE1 as A where  (QUESTION = '001' OR QUESTION = '002') AND TYPE = 'A'  GROUP BY IDENTIF    
 
Je ne sais pas comment récupérer dans ma requête la "réponse" correspondant à la ligne de la question 001 ou la ligne de la question 002
 
j'espère que j'ai bien expliqué mon problème ^^
 
Merci d'avance pour votre aide :-)

Reply

Marsh Posté le 03-04-2012 à 09:34:50   

Reply

Marsh Posté le 03-04-2012 à 10:57:40    

Salut,
 
Tu veux autant de résultats qu'il y en a dans la table :
IDENTIF    REPONSE1    REPONSE2   REPONSE3 .......................... ETC
 
ou seulement les 2 premiers :
IDENTIF    REPONSE1    REPONSE2


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 03-04-2012 à 11:16:18    

Merci pour ton aide
 
 
Seulement REPONSE1 ET REPONSE2 :-)
Mais pour information, je veux bien ta méthode pour avoir toutes les réponses ^^


Message édité par sisier le 03-04-2012 à 11:33:54
Reply

Marsh Posté le 03-04-2012 à 13:47:35    

Y a un truc que je ne comprend pas en fait.
Tu ne parles pas du champ QUESTION dans tes résultats ?
 
C'est pas très clair pour moi  :??:  
 
Tu peux ré-expliquer un peu mieux ?


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 03-04-2012 à 13:57:05    

oui, en  gros
 
Je veux en une seule ligne pour chaque numéro d'identification donné (et seulement pour le type A) --> la réponse aux questions 001 et 002.
 
exemple :
IDENTIF   QUESTION     HEURE   REPONSE    TYPE  
0001          0001          111245   00X1          A  
0001          0001          081130   00X2          A  
0001          0002          031220   00X3          A  
0001          0003          134110   00X4          C  
0002          0001          111245   00X5          A  
0002          0001          081130   00X6          A  
0002          0002          031220   00X7          A  
0002          0003          134110   00X8          C  
 
Donnerait :
IDENTIF   REPONSE1  "(NUMQUE = 001)"  REPONSE2   "(NUMQUE = 002)"
0001        00X1                                   00X3
0002        00X5                                   00X7
 

Reply

Marsh Posté le 03-04-2012 à 14:06:55    

Et le même IDENTIF peut avoir plusieurs REPONSE pour une même QUESTION ?
IDENTIF   QUESTION     HEURE   REPONSE    TYPE  
0001          0001          111245   00X1          A  
0001          0001          081130   00X2          A  
 
Comment on sait laquelle prendre ?
 
Avec l'heure j'imagine, mais si c'est pas le même jour ?


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 03-04-2012 à 14:49:35    

oui, elle peut
 
On utilise l'heure la plus grande.
Sur le jour, il y a déjà un filtre au préalable.
 

Reply

Marsh Posté le 03-04-2012 à 15:03:09    

Est-ce que ton SGBD accepte l'instruction LIMIT ?


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 03-04-2012 à 15:08:55    

je ne pense pas. C'est du sql server.

Reply

Marsh Posté le 03-04-2012 à 15:33:48    

Je pense qu'il faut que tu fasses une sous requête en numérotant tes lignes avec row_number qui doit fonctionner sur sql server.
Ensuite tu remontes tes lignes numéro 1 dans une colonne et numéro 2 dans l'autre.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 03-04-2012 à 15:33:48   

Reply

Marsh Posté le 03-04-2012 à 16:18:30    

Merci.. On va essayé de s'en sortir comme ça

Reply

Marsh Posté le 04-04-2012 à 08:51:49    

Voila comment je ferai:

Code :
  1. DECLARE @tmpTable TABLE (IDENTIF char(4), QUESTION char(4), HEURE char(6), REPONSE char(4), TYPE char(1))
  2.  
  3. INSERT @tmpTable (IDENTIF, QUESTION, HEURE, REPONSE, TYPE) VALUES
  4.     ('0001','0001','111245','00x1','A'),
  5.     ('0001','0001','081130','00x2','A'),
  6.     ('0001','0002','031220','00x3','A'),
  7.     ('0001','0003','134110','00x4','C'),
  8.     ('0002','0001','111245','00x5','A'),
  9.     ('0002','0001','081130','00x6','A'),
  10.     ('0002','0002','031220','00x7','A'),
  11.     ('0002','0003','134110','00x8','C')
  12.  
  13. SELECT IDENTIF
  14.     , MAX(CASE WHEN QUESTION = '0001' THEN REPONSE ELSE '' END) REPONSE1
  15.     , MAX(CASE WHEN QUESTION = '0002' THEN REPONSE ELSE '' END) REPONSE2
  16. FROM (SELECT IDENTIF, QUESTION, HEURE, REPONSE, TYPE, ROW_NUMBER() OVER (PARTITION BY IDENTIF, QUESTION ORDER BY IDENTIF, QUESTION, HEURE DESC) RN
  17.       FROM @tmpTable) a
  18. WHERE RN = 1
  19. GROUP BY IDENTIF


 
Le resultat donne bien ce que tu veux:

Code :
  1. IDENTIF REPONSE1 REPONSE2
  2. 0001  00x1  00x3
  3. 0002  00x5  00x7


Reply

Marsh Posté le 05-04-2012 à 08:39:24    

Oula, je n'aurais jamais trouvé tout seul.
 
Merci :)
 

Oliiii a écrit :

Voila comment je ferai:

Code :
  1. DECLARE @tmpTable TABLE (IDENTIF char(4), QUESTION char(4), HEURE char(6), REPONSE char(4), TYPE char(1))
  2.  
  3. INSERT @tmpTable (IDENTIF, QUESTION, HEURE, REPONSE, TYPE) VALUES
  4.     ('0001','0001','111245','00x1','A'),
  5.     ('0001','0001','081130','00x2','A'),
  6.     ('0001','0002','031220','00x3','A'),
  7.     ('0001','0003','134110','00x4','C'),
  8.     ('0002','0001','111245','00x5','A'),
  9.     ('0002','0001','081130','00x6','A'),
  10.     ('0002','0002','031220','00x7','A'),
  11.     ('0002','0003','134110','00x8','C')
  12.  
  13. SELECT IDENTIF
  14.     , MAX(CASE WHEN QUESTION = '0001' THEN REPONSE ELSE '' END) REPONSE1
  15.     , MAX(CASE WHEN QUESTION = '0002' THEN REPONSE ELSE '' END) REPONSE2
  16. FROM (SELECT IDENTIF, QUESTION, HEURE, REPONSE, TYPE, ROW_NUMBER() OVER (PARTITION BY IDENTIF, QUESTION ORDER BY IDENTIF, QUESTION, HEURE DESC) RN
  17.       FROM @tmpTable) a
  18. WHERE RN = 1
  19. GROUP BY IDENTIF


 
Le resultat donne bien ce que tu veux:

Code :
  1. IDENTIF REPONSE1 REPONSE2
  2. 0001  00x1  00x3
  3. 0002  00x5  00x7




Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed