|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
Bon si vous trouvez mieux comme titre je veux bien changer (celui-ci ne m'inspire pas trop)
J'explique mon problème. J'ai une table Event dont voici le code Code :
Donc l'idée c'est de recréer une table EventSequence qui reprendrait 5 Evenements consecutifs(par exemple) avec le time du 1 et du 5 ce qui donnerait Code :
Utiliser PIVOT(Mais comment?), parcourir avec 2 curseurs la table(là aussi le comment m'échappe encore). En gros pour résumé la vraie question est : comment faire ceci le plus simplement(et efficacement) possible? Bien à vous, Loic |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
il faut faire une CTE avec un ROW_NUMBER sur le critère temps, puis, sur cette CTE, 5 jointures pour chacune des 5 colonnes sur le RW_NUMBER - 1.
Sans le DDL de vos tables, difficile d'en dire plus. Merci de respectez la charte de postage : http://www.developpez.net/forums/d96...vement-poster/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Bonjour,
Quelle est la finalité de la requête? si c'est pour de l'affichage chargez vous données classiquement et faite votre présentation dans votre code client (via instanciation d'un objet par exemple...). Qu'arrivera t'il le jour ou vous aurez un sixième event?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#4 | |||
![]() ![]() |
Citation:
Code :
Au passage, Time est un mot réservé que vous ne devriez pas utiliser en tant que nom de colonne.
__________________
Email : http://scr.im/waldar |
|||
|
00
|
|
|
#5 | ||||
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
Tout d'abord merci de vos réponses rapides.
Voci ma solution Code :
Code :
Merci pour votre aide Loic |
||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() |
Quid des performances?
Pouvez vous fournir les statistics IO et TIME?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Avez vous testé (et surtout comparé les perfs) la requête de Waldar ? |
|
|
|
00
|
|
|
#8 | |||
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
@Iberseek : Voici le résultat de ta requete
Code :
Citation:
Un ou plusieurs rapports SSRS. Code :
chargez vous données classiquement et faite votre présentation dans votre code client (via instanciation d'un objet par exemple...). Code :
Qu'arrivera t'il le jour ou vous aurez un sixième event?
plus exactement, je suis en train de rédiger une analyse fonctionelle sur différents rapports qui pourraient etre implémentés afin d'améliorer le réglage de capteurs sur des machines de production. Pour l'instant je suis seul décideur et je décide 5. Mais il est vrai que les demandeurs souhaiteront soit plus soit moins (de 3 à 10 à mon avis). j'adapterai ma requete mais une fois la solution en place ca ne bougera plus car ce facteur sera renseigné dans les spécifications comme non modifiable et ici on respecte à la lettre ce genre de document. Bien à vous , Loïc |
|||
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
@iberserk : oui j'étais fatigué
|
|
|
00
|
|
|
#11 |
![]() ![]() |
Je ne vois pas pourquoi la requête que je vous ai proposé ne fonctionne pas si vous garantissez la continuité des Id.
Pouvez-vous fournir un peu plus de données histoire que je regarde ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#12 | ||||||
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
Bonjour Waldar,
Voici le contenu de ma table de départ (à partir de la requete de création/insertion ci-dessus) Code :
Code :
Code :
Bien à toi Loic |
||||||
|
|
00
|
|
|
#13 | ||
![]() ![]() |
Merci pour les compléments d'information.
Je n'avais pas bien compris votre besoin en fait, j'avais raté le décalage systématique de 1. En m'appuyant sur la même syntaxe que précédemment, je crée un simili produit cartésien qui je pense sera moins coûteux que toutes les jointures en FULL OUTER JOIN. Cela reste néanmoins à tester sur une plus grande volumétrie. Ici je m'appuie sur une CTE pour que la solution fonctionne partout, mais si vous avez une table d'entiers c'est encore mieux : Code :
C'est facilement changeable d'une requête à l'autre, ça dépend de ce que vous voulez faire.
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#14 | ||||
|
Nouveau Membre du Club
![]() Loïc BernardConsultant en Business Intelligence Inscription : avril 2008 Messages : 44 ![]() |
ah oui de fait les 2 requetes ne sont pas du meme monde
j'ai fait le test sur une table contenant un peu plus de 20000 lignes Voici pour la mienne. Code :
Code :
Merci d'avance bien à toi, Loïc |
||||
|
|
00
|
|
|
#15 | ||||||||
![]() ![]() |
Le point de départ de ma requête c'est de faire un regroupement tous les cinq Id (je reprends celui de ma première requête), et de jouer sur le modulo 5 pour afficher les colonnes.
Voilà le résultat de votre table en répartissant les IdTypeEvent sur les cinq colonnes : Code :
Comme il y a beaucoup de trous, je réalise un agrégat (on appelle cela un pivot) pour tout redéfinir par ligne : Code :
J'ai compris ce matin qu'il fallait créer un décalage de toutes les données une par une. Pour ce faire, il faut donc que je parte de l'IdEvent 2, et que celui ci prenne place dans la première colonne. Je repars de cette dernière requête, juste pour gérer ces nouvelles lignes : Code :
Donc à partir de ces constats, soit je faisais cinq requêtes distinctes toutes en UNION ALL, soit je créais un produit cartésien presque complet pour créer les nouvelles valeurs. J'ai choisi cette solution. Le produit cartésien est simple à faire : Code :
L'avantage de cette requête par rapport à la votre, c'est qu'elle ne lit qu'une seule fois les données de la table Event, la votre devait le faire cinq fois. Il faut les statistiques IO avec le nombres de lectures pour s'en rendre compte.
__________________
Email : http://scr.im/waldar |
||||||||
|
00
|
Copyright © 2000-2012 - www.developpez.com