Bonjour,
Je travaille sur sql server 2008, je dois construire une requête qui est composée par plusieurs sous requêtes.
Pour cela, j'ai développé deux requêtes
requete 1 temps de réponse 20 seconde
Ces deux requêtes sont jointes par la notion de secteur (sec) comme suit sur la requete finale:
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 SELECT sect.lg_nomparent lg, COUNT(DISTINCT a.lg_annonceur) AS ann FROM FilteredLg_compterendu AS a INNER JOIN Filteredlg_systemuser_lg_compterendu AS b ON b.lg_compterenduid = a.lg_compterenduid INNER JOIN FilteredSystemUser AS usr ON usr.systemuserid = b.systemuserid INNER JOIN FilteredAccount AS d ON d.accountid = a.lg_annonceur INNER JOIN FilteredLg_terraindejeu AS e ON e.lg_annonceur = d.accountid inner join FilteredLg_ouvertureterrainsdejeu ouv on ouv.lg_commercial=usr.systemuserid inner join FilteredLg_secteurdactivite sect on sect.lg_secteurdactiviteid=e.lg_secteurdactivite inner join Filteredlg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid inner join FilteredLg_pole pole on pole_usr.lg_poleid=pole.lg_poleid WHERE convert(nvarchar(max),a.lg_daterdv ,112) BETWEEN convert (nvarchar(max),ouv.lg_datededebut,112) AND convert (nvarchar(max),ouv.lg_datedefin,112) and e.lg_commercial=usr.systemuserid and pole.lg_name='INTERNET' GROUP BY sect.lg_nomparent requete 2 temps de réponse 5 sec select sec.lg_nomparent, count(distinct prioritaire.count_prioritaire) as 'Client LP prioritaire', count (distinct count_client) as 'Client LP', count(distinct count_prospect) as 'Prospect', from FilteredLg_secteurdactivite sec inner join FilteredLg_terraindejeu Ter on sec.lg_secteurdactiviteid=Ter.lg_secteurdactivite inner join FilteredSystemUser usr on usr.systemuserid=ter.lg_commercial inner join Filteredlg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid inner join FilteredLg_pole pole on pole.lg_poleid=pole_usr.lg_poleid and pole.lg_name='INTERNET' left join (select distinct(lg_annonceur) count_prioritaire,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=1 and lg_annonceur is not null ) prioritaire on Ter.lg_terraindejeuid=prioritaire.lg_terraindejeuid left join(select distinct(lg_annonceur) count_client,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=2 and lg_annonceur is not null ) Client on Ter.lg_terraindejeuid=Client.lg_terraindejeuid left join (select distinct(lg_annonceur) count_prospect,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=3 and lg_annonceur is not null ) prospect on Ter.lg_terraindejeuid=prospect.lg_terraindejeuid
Cette requête tourne sans renvoyer de résultat, je ne vois pas de produit cartésien, c bizare
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
38
39 select sec.lg_nomparent, count(distinct prioritaire.count_prioritaire) as 'Client LP prioritaire', count (distinct count_client) as 'Client LP', count(distinct count_prospect) as 'Prospect', H.ann as H from FilteredLg_secteurdactivite sec inner join FilteredLg_terraindejeu Ter on sec.lg_secteurdactiviteid=Ter.lg_secteurdactivite inner join FilteredSystemUser usr on usr.systemuserid=ter.lg_commercial inner join Filteredlg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid inner join FilteredLg_pole pole on pole.lg_poleid=pole_usr.lg_poleid and pole.lg_name='INTERNET' left join (select distinct(lg_annonceur) count_prioritaire,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=1 and lg_annonceur is not null ) prioritaire on Ter.lg_terraindejeuid=prioritaire.lg_terraindejeuid left join(select distinct(lg_annonceur) count_client,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=2 and lg_annonceur is not null ) Client on Ter.lg_terraindejeuid=Client.lg_terraindejeuid left join (select distinct(lg_annonceur) count_prospect,lg_terraindejeuid from FilteredLg_terraindejeu where lg_statut=3 and lg_annonceur is not null ) prospect on Ter.lg_terraindejeuid=prospect.lg_terraindejeuid /* calcul colonne H = Nombre dannonceurs distincts appartenant à la famille de secteur dactivité A et faisant parti du terrain de jeu du commercial Z ayant au moins 1 compte rendu où le commercial Z est dans la liste des Commerciaux et dont la date de rendez-vous est comprise entre la date de début et de fin du tdj */ left join (SELECT sect.lg_nomparent lg_sec, COUNT(DISTINCT a.lg_annonceur) AS ann FROM FilteredLg_compterendu AS a INNER JOIN Filteredlg_systemuser_lg_compterendu AS b ON b.lg_compterenduid = a.lg_compterenduid INNER JOIN FilteredSystemUser AS usr ON usr.systemuserid = b.systemuserid INNER JOIN FilteredAccount AS d ON d.accountid = a.lg_annonceur INNER JOIN FilteredLg_terraindejeu AS e ON e.lg_annonceur = d.accountid inner join FilteredLg_ouvertureterrainsdejeu ouv on ouv.lg_commercial=usr.systemuserid inner join FilteredLg_secteurdactivite sect on sect.lg_secteurdactiviteid=e.lg_secteurdactivite inner join Filteredlg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid inner join FilteredLg_pole pole on pole_usr.lg_poleid=pole.lg_poleid WHERE convert(nvarchar(max),a.lg_daterdv ,112) BETWEEN convert (nvarchar(max),ouv.lg_datededebut,112) AND convert (nvarchar(max),ouv.lg_datedefin,112) and e.lg_commercial=usr.systemuserid and pole.lg_name='INTERNET' GROUP BY sect.lg_nomparent ) AS H on sec.lg_nomparent=H.lg_sec group by sec.lg_nomparent,H.ann
Merci pour votre aide
Partager