Bonjour à tous,
j'ai besoin des compétences d'un DBA sympa :-P
Je vous explique mon cas :
Je travaille sur l'outil Microsoft Dynamics CRM 2011 et je fais actuellement du reporting.
J'ai 3 entitées (Entité A - Entité B - Entité C) donc 3 tables.
Chacunes sont reliés entre elles dans dynamics. Je m'explique :
L'entité A contient des informations de type (Nom, date de création, Date de modification, Id)
L'entité B contient des informations de type (Id, date de création / modification/ liens avec l'entité A)
L'entité C contient le même type de données et contient le liens avec l'entité B
L'entité A est un dossier voiture par exemple
L'entité B est un dossier déplacement
L'entité C est un dossier plein d'essence
Dans la pratique, l'ensemble des 3 entités nous permet de savoir que la voiture A a réalisé tel déplacement, et a réalisé X plein d'essence pour faire ses déplacements.
Bon le décor est planté, j'espère avoir été clair, c'est purement fictif mais la réalité est bien plus compliquée à expliquer :-P
Passons maintenant à mon souhait dans ma requete.
je souhaite récupérer en une requete le déplacement le plus récent de chaque voiture ainsi que des infos diverses de la table voiture / déplacement / plein d'essence.
Je ne dois donc trouver qu'une seule ligne par voiture mais qui contient certaines infos des autres tables.
Pour les infos pas de soucis, INNER JOIN et compagnie et j'ai tout. Sauf qu'actuellement, je me retrouve avec quelque chose de ce type :
VOITURE A / Déplacement 1 / montant du plein : 80 € / 1200 Km parcourus / Le 03/07/2009
VOITURE A / Déplacement 2 / montant du plein : 86 € / 1150 Km parcourus / Le 03/07/2010
VOITURE A / Déplacement 3 / montant du plein : 43 € / 840 Km parcourus / Le 03/07/2011
VOITURE A / Déplacement 4 / montant du plein : 98 € / 1308 Km parcourus / Le 03/07/2012
VOITURE B / Déplacement 1 / montant du plein : 80 € / 1200 Km parcourus / Le 03/07/2009
VOITURE B / Déplacement 2 / montant du plein : 86 € / 1150 Km parcourus / Le 03/07/2010
VOITURE B / Déplacement 3 / montant du plein : 43 € / 840 Km parcourus / Le 03/07/2011
VOITURE B / Déplacement 4 / montant du plein : 98 € / 1308 Km parcourus / Le 03/07/2012
Je ne voudrais avoir que les plus récents déplacements de chaque voiture :
VOITURE A / Déplacement 4 / montant du plein : 98 € / 1308 Km parcourus / Le 03/07/2012
VOITURE B / Déplacement 4 / montant du plein : 98 € / 1308 Km parcourus / Le 03/07/2012
Clairement, je ne sais pas comment m'y prendre, comment effectuer ma recherche sur le net, etc...
J'ai essayé des group By Voiture ça ne fonctionne pas. J'ai un message d'erreur qui m'indique que mes autres champs ne sont pas des fonctions d'agrégations. Pareil en mettant MAX(maDateDeDéplacement) dans mon SELECT.
Si ça peut vous aider, je travaille en environnement purement microsoft donc T-SQL.
J'espère avoir donné toutes les infos nécessaires. En tout cas, merci pour les pistes que vous pourrez m'apporter !
N'hésitez pas à me demander plus de détails !
Cordialement
-------
Si ça peut vous aider, voici ma requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 SELECT [ODM].[CreatedOn] as 'Date de création du mandat', [ODM].[new_serviceordernumber] as 'Numéro du mandat', [Mouvement].[modifiedon] as 'Date du mouvement', [ODM].[new_serviceorderId] as 'ID_Odm', [Incident].[incidentid] as 'ID_Incident', [Mouvement].[new_movementtypename], [Mouvement].[new_name], [Incident].[incidentid], [Incident].[new_serviceorderid], [ODM].[statecode], [ODM].[statuscode] FROM ( SELECT MAX([modifiedon]) as 'Date du mouvement', [new_incidentid] FROM [Filterednew_movement] GROUP BY [new_incidentid] ) as Mouvement_recents INNER JOIN [Filterednew_movement] as Mouvement on [Mouvement].[new_incidentid] = [Mouvement_recents].[new_incidentid] INNER JOIN [FilteredIncident] as Incident on [Incident].[incidentid] = [Mouvement_recents].[new_incidentid] INNER JOIN [new_serviceorder] as ODM on [Incident].[new_serviceorderid] = [ODM].[new_serviceorderId] WHERE [ODM].[statuscode] != 2 AND [ODM].[statuscode] != 100000002 ORDER BY [ODM].[CreatedOn] ASC
Partager