Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 12h21   #1
Membre régulier
 
Inscription : janvier 2006
Messages : 412
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 412
Points : 72
Points : 72
Par défaut Pivot ou bien union

salut,

j'ai besoin de recuperer des valeur ex(val1,val2,val3) pour une duree de 3 jours.

mon resultat finale doir etre comme ça:


Code :
1
2
3
4
5
6
7
8
9
10
11

Jours-2              jours-1         jours  
ID   val1  val2 val3     val1  val2 val3  val1 val2 val3 
 
1      10     1     2         3      5    4       2   2     13
2      4       2    12        1      2    5       1   24   103
........
........
......
100   11     13   10        13    15  14     12   21    113

j'arrive à recuper tout ça mais dans une meme table.
je m'explique.
pour chaque id j'ai trois ligne.
chaque ligne correspond à une journée

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
ID   val1  val2 val3      
1      10     1     2 
1       3      5    4           
1       2      2     13
2       4      2    12        
2       5      4     1      
2       5       1   24   
........
........
......
100   11      13    10
100   13      15    14     
100   12      21    113

est ce que l'utilisation de pivot puet m'aider??
des idées?
zalalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 14h23   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Je ne connais pas les capacité de pivot de SQL Server.

En contrepartie, je sais que de nombreux autres SGBD ne supportent aucune fonction de ce type.

Donc dans l'optique de conserver ton code un minimum portable et compréhensible par tous, je te conseille vivement d'utiliser des auto-jointures pour récupérer les données pour J, J-1 et J-2.

PS : Je ne vois pas de notion de "jour" dans ton exemple. Est-ce que tu as cette information quelque part ?
(genre, comme garantis-tu que la seconde ligne de ton résultat actuel c'est bien les valeurs de ID=1 à j-1 et non à j-2, n'ayant pas de données à j-1 ? comment garantis-tu l'ordre ?)

Avec une structure de ce type, je verrais un truc du genre :

table OBJ
ID (pk)
(le reste on s'en fout)

table VAL
ID (fk vers OBJ.ID)
JOUR (int)
V1 (val1)
V1 (val2)
V1 (val3)

Code :
1
2
3
4
5
6
 
SELECT obj.id, val1.v1, val1.v2, val1.v3, val2.v1, val2.v2, val2.v3, val3.v1, val3.v2, val3.v3
FROM obj
LEFT OUTER JOIN val val1 ON val1.id = obj.id AND val1.jour = round(dbo.getdate(), 0)
LEFT OUTER JOIN val val2 ON val2.id = obj.id AND val2.jour = round(dbo.getdate(), 0) - 1
LEFT OUTER JOIN val val3 ON val3.id = obj.id AND val3.jour = round(dbo.getdate(), 0) - 2
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h56   #3
Membre régulier
 
Inscription : janvier 2006
Messages : 412
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 412
Points : 72
Points : 72
ok merci pour ta réponse.
j'ai un autre soucis.

je veux bien à partir de cett table qui represente des données par (10 min):

Code :
1
2
3
4
5
6
7
 
00:00	1		
00:10	2	
00:20	3		
00:30	4	
00:40	5		
00:50	6
Recuperer une table qui ressemble à cafaire la somme des 3 lignes)
autrement dis recuperer dans un intervalle de 30min.

je trouve pas comment regrouper mes données.

des idées?
Merci d'avance.
zalalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h39   #4
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Le plus compliqué, c'est de formatter ton heure de la façon suivante :

0:00 => 0:00
0:10 => 0:00
0:20 => 0:00
0:30 => 0:30
0:40 => 0:30
0:50 => 0:30

Une fois que t'as réussi à faire ça, t'as plus qu'à faire un sum() sur tes val, et de faire un group by ta date mise en forme avec la règle ci-dessus.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h04   #5
Membre régulier
 
Inscription : janvier 2006
Messages : 412
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 412
Points : 72
Points : 72
merci pour ta reponse.

mais comment je peux le faire ???

c'est ça la question:s
zalalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 09h56   #6
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Avec une conbinaison entre les fonctions de formattage de dates, des substr et datepart, et un bon gros case des familles.

Après, je peux pas entrer dans le détail, j'ai pas de SQL Server sous la main pour faire un test.

En tout cas, ça va pas être joli au final, SQL Server est assez pauvre en ce qui concerne le formattage des dates, donc beaucoup de découpage à la main...
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 11h11   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Code :
1
2
3
4
 
SELECT DATEPART(hour,heure),(DATEPART(MINUTE,heure) /30) AS PART,SUM(nbr) AS CUMUL
FROM test2
GROUP BY DATEPART(hour,heure),(DATEPART(MINUTE,heure) /30)
avec heure= '00:10' par exemple et nbr ta deuxième colonne ...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web