SELECT
agences.nom,
'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END),
'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END),
'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END),
'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END)
FROM factures
INNER JOIN mois_comptable ON
mois_comptable.cp_temps = factures.cp_mois_comptable
INNER JOIN groupe ON
factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
INNER JOIN societes ON
groupe.code_societe = societes.code_societe
INNER JOIN agences ON
groupe.code_agence = agences.code_agence
WHERE
mois_comptable.AAAAMM Between '200303' And '200403'
GROUP BY
agences.nom
L'idée, c'est d'afficher le nombre de contrats par société et par agence du
groupe
sur une période donnée. C'est donc un tableau croisé (dynamique).
La requête met environ 60 s à l'execution
Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi
ainsi :
SELECT
agences.nom,
count(cp_contrat)
FROM factures
INNER JOIN mois_comptable ON
mois_comptable.cp_temps = factures.cp_mois_comptable
INNER JOIN groupe ON
factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
INNER JOIN societes ON
groupe.code_societe = societes.code_societe
INNER JOIN agences ON
groupe.code_agence = agences.code_agence
WHERE
mois_comptable.AAAAMM Between '200303' And '200403'
GROUP BY
agences.nom
prend 5 secondes
Les problèmes viennent semble-t-il des Count distinct sur les colonnes
pivot.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Steve Kass
Damien,
Est-ce que cette requête donne le même résultat plus rapidement?
select agences.nom, count(case when nom = 'S1' then 1 end) S1, count(case when nom = 'S2' then 1 end) S2, count(case when nom = 'S3' then 1 end) S3, count(case when nom = 'S4' then 1 end) S4 from ( select agences.nom, societes.nom, cp_contrat from <jointure> where societes.nom in ('S1','S2','S3','S4') group by agence.nom, societes.nom, cp_contrat ) t
Steve Kass Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message news:
Bonjour, Sur SQL 2000, j'ai la requête suivante :
SELECT agences.nom, 'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END), 'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END), 'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END), 'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END) FROM factures INNER JOIN mois_comptable ON mois_comptable.cp_temps = factures.cp_mois_comptable INNER JOIN groupe ON factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' INNER JOIN societes ON groupe.code_societe = societes.code_societe INNER JOIN agences ON groupe.code_agence = agences.code_agence WHERE mois_comptable.AAAAMM Between '200303' And '200403' GROUP BY agences.nom
L'idée, c'est d'afficher le nombre de contrats par société et par agence
du
groupe sur une période donnée. C'est donc un tableau croisé (dynamique).
La requête met environ 60 s à l'execution
Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi
ainsi :
SELECT agences.nom, count(cp_contrat) FROM factures INNER JOIN mois_comptable ON mois_comptable.cp_temps = factures.cp_mois_comptable INNER JOIN groupe ON factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' INNER JOIN societes ON groupe.code_societe = societes.code_societe INNER JOIN agences ON groupe.code_agence = agences.code_agence WHERE mois_comptable.AAAAMM Between '200303' And '200403' GROUP BY agences.nom
prend 5 secondes
Les problèmes viennent semble-t-il des Count distinct sur les colonnes pivot.
comment puis-je optimiser ça ?
Merci de votre aide
Damien
Damien,
Est-ce que cette requête donne le même résultat plus rapidement?
select
agences.nom,
count(case when nom = 'S1' then 1 end) S1,
count(case when nom = 'S2' then 1 end) S2,
count(case when nom = 'S3' then 1 end) S3,
count(case when nom = 'S4' then 1 end) S4
from (
select
agences.nom,
societes.nom,
cp_contrat
from <jointure>
where societes.nom in ('S1','S2','S3','S4')
group by agence.nom, societes.nom, cp_contrat
) t
Steve Kass
Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message
news:u9gZXhWHEHA.320@tk2msftngp13.phx.gbl...
Bonjour,
Sur SQL 2000, j'ai la requête suivante :
SELECT
agences.nom,
'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END),
'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END),
'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END),
'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END)
FROM factures
INNER JOIN mois_comptable ON
mois_comptable.cp_temps = factures.cp_mois_comptable
INNER JOIN groupe ON
factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
INNER JOIN societes ON
groupe.code_societe = societes.code_societe
INNER JOIN agences ON
groupe.code_agence = agences.code_agence
WHERE
mois_comptable.AAAAMM Between '200303' And '200403'
GROUP BY
agences.nom
L'idée, c'est d'afficher le nombre de contrats par société et par agence
du
groupe
sur une période donnée. C'est donc un tableau croisé (dynamique).
La requête met environ 60 s à l'execution
Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi
ainsi :
SELECT
agences.nom,
count(cp_contrat)
FROM factures
INNER JOIN mois_comptable ON
mois_comptable.cp_temps = factures.cp_mois_comptable
INNER JOIN groupe ON
factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
INNER JOIN societes ON
groupe.code_societe = societes.code_societe
INNER JOIN agences ON
groupe.code_agence = agences.code_agence
WHERE
mois_comptable.AAAAMM Between '200303' And '200403'
GROUP BY
agences.nom
prend 5 secondes
Les problèmes viennent semble-t-il des Count distinct sur les colonnes
pivot.
Est-ce que cette requête donne le même résultat plus rapidement?
select agences.nom, count(case when nom = 'S1' then 1 end) S1, count(case when nom = 'S2' then 1 end) S2, count(case when nom = 'S3' then 1 end) S3, count(case when nom = 'S4' then 1 end) S4 from ( select agences.nom, societes.nom, cp_contrat from <jointure> where societes.nom in ('S1','S2','S3','S4') group by agence.nom, societes.nom, cp_contrat ) t
Steve Kass Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message news:
Bonjour, Sur SQL 2000, j'ai la requête suivante :
SELECT agences.nom, 'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END), 'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END), 'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END), 'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END) FROM factures INNER JOIN mois_comptable ON mois_comptable.cp_temps = factures.cp_mois_comptable INNER JOIN groupe ON factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' INNER JOIN societes ON groupe.code_societe = societes.code_societe INNER JOIN agences ON groupe.code_agence = agences.code_agence WHERE mois_comptable.AAAAMM Between '200303' And '200403' GROUP BY agences.nom
L'idée, c'est d'afficher le nombre de contrats par société et par agence
du
groupe sur une période donnée. C'est donc un tableau croisé (dynamique).
La requête met environ 60 s à l'execution
Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi
ainsi :
SELECT agences.nom, count(cp_contrat) FROM factures INNER JOIN mois_comptable ON mois_comptable.cp_temps = factures.cp_mois_comptable INNER JOIN groupe ON factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' INNER JOIN societes ON groupe.code_societe = societes.code_societe INNER JOIN agences ON groupe.code_agence = agences.code_agence WHERE mois_comptable.AAAAMM Between '200303' And '200403' GROUP BY agences.nom
prend 5 secondes
Les problèmes viennent semble-t-il des Count distinct sur les colonnes pivot.
comment puis-je optimiser ça ?
Merci de votre aide
Damien
Damien
Bonjour Steve.
Magnifique !!
Le temps d'exécution est divisé par 5 ..ce qui nous fait environ 12 secondes... ce qui est très acceptable. Petit oubli, il faut ajouter un Group By t.agences.nom à la fin de la requête.
Merci beaucoup
Damien
"Steve Kass" a écrit dans le message de news:
Damien,
Est-ce que cette requête donne le même résultat plus rapidement?
select agences.nom, count(case when nom = 'S1' then 1 end) S1, count(case when nom = 'S2' then 1 end) S2, count(case when nom = 'S3' then 1 end) S3, count(case when nom = 'S4' then 1 end) S4 from ( select agences.nom, societes.nom, cp_contrat from <jointure> where societes.nom in ('S1','S2','S3','S4') group by agence.nom, societes.nom, cp_contrat ) t
Steve Kass Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message news: > Bonjour, > Sur SQL 2000, j'ai la requête suivante : > > SELECT > agences.nom, > 'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END), > 'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END), > 'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END), > 'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END) > FROM factures > INNER JOIN mois_comptable ON > mois_comptable.cp_temps = factures.cp_mois_comptable > INNER JOIN groupe ON > factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' > INNER JOIN societes ON > groupe.code_societe = societes.code_societe > INNER JOIN agences ON > groupe.code_agence = agences.code_agence > WHERE > mois_comptable.AAAAMM Between '200303' And '200403' > GROUP BY > agences.nom > > L'idée, c'est d'afficher le nombre de contrats par société et par agence du > groupe > sur une période donnée. C'est donc un tableau croisé (dynamique). > > La requête met environ 60 s à l'execution > > Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi > > ainsi : > > SELECT > agences.nom, > count(cp_contrat) > FROM factures > INNER JOIN mois_comptable ON > mois_comptable.cp_temps = factures.cp_mois_comptable > INNER JOIN groupe ON > factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' > INNER JOIN societes ON > groupe.code_societe = societes.code_societe > INNER JOIN agences ON > groupe.code_agence = agences.code_agence > WHERE > mois_comptable.AAAAMM Between '200303' And '200403' > GROUP BY > agences.nom > > prend 5 secondes > > Les problèmes viennent semble-t-il des Count distinct sur les colonnes > pivot. > > comment puis-je optimiser ça ? > > Merci de votre aide > > Damien > >
Bonjour Steve.
Magnifique !!
Le temps d'exécution est divisé par 5 ..ce qui nous fait environ 12
secondes... ce qui est très acceptable.
Petit oubli, il faut ajouter un Group By t.agences.nom à la fin de la
requête.
Merci beaucoup
Damien
"Steve Kass" <skass@drew.edu> a écrit dans le message de news:
ew2FpNZHEHA.3200@TK2MSFTNGP10.phx.gbl...
Damien,
Est-ce que cette requête donne le même résultat plus rapidement?
select
agences.nom,
count(case when nom = 'S1' then 1 end) S1,
count(case when nom = 'S2' then 1 end) S2,
count(case when nom = 'S3' then 1 end) S3,
count(case when nom = 'S4' then 1 end) S4
from (
select
agences.nom,
societes.nom,
cp_contrat
from <jointure>
where societes.nom in ('S1','S2','S3','S4')
group by agence.nom, societes.nom, cp_contrat
) t
Steve Kass
Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message
news:u9gZXhWHEHA.320@tk2msftngp13.phx.gbl...
> Bonjour,
> Sur SQL 2000, j'ai la requête suivante :
>
> SELECT
> agences.nom,
> 'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END),
> 'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END),
> 'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END),
> 'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END)
> FROM factures
> INNER JOIN mois_comptable ON
> mois_comptable.cp_temps = factures.cp_mois_comptable
> INNER JOIN groupe ON
> factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
> INNER JOIN societes ON
> groupe.code_societe = societes.code_societe
> INNER JOIN agences ON
> groupe.code_agence = agences.code_agence
> WHERE
> mois_comptable.AAAAMM Between '200303' And '200403'
> GROUP BY
> agences.nom
>
> L'idée, c'est d'afficher le nombre de contrats par société et par agence
du
> groupe
> sur une période donnée. C'est donc un tableau croisé (dynamique).
>
> La requête met environ 60 s à l'execution
>
> Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi
>
> ainsi :
>
> SELECT
> agences.nom,
> count(cp_contrat)
> FROM factures
> INNER JOIN mois_comptable ON
> mois_comptable.cp_temps = factures.cp_mois_comptable
> INNER JOIN groupe ON
> factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence'
> INNER JOIN societes ON
> groupe.code_societe = societes.code_societe
> INNER JOIN agences ON
> groupe.code_agence = agences.code_agence
> WHERE
> mois_comptable.AAAAMM Between '200303' And '200403'
> GROUP BY
> agences.nom
>
> prend 5 secondes
>
> Les problèmes viennent semble-t-il des Count distinct sur les colonnes
> pivot.
>
> comment puis-je optimiser ça ?
>
> Merci de votre aide
>
> Damien
>
>
Le temps d'exécution est divisé par 5 ..ce qui nous fait environ 12 secondes... ce qui est très acceptable. Petit oubli, il faut ajouter un Group By t.agences.nom à la fin de la requête.
Merci beaucoup
Damien
"Steve Kass" a écrit dans le message de news:
Damien,
Est-ce que cette requête donne le même résultat plus rapidement?
select agences.nom, count(case when nom = 'S1' then 1 end) S1, count(case when nom = 'S2' then 1 end) S2, count(case when nom = 'S3' then 1 end) S3, count(case when nom = 'S4' then 1 end) S4 from ( select agences.nom, societes.nom, cp_contrat from <jointure> where societes.nom in ('S1','S2','S3','S4') group by agence.nom, societes.nom, cp_contrat ) t
Steve Kass Drew University
"Damien" <dams_@[antispam]caramail.com> wrote in message news: > Bonjour, > Sur SQL 2000, j'ai la requête suivante : > > SELECT > agences.nom, > 'S1'=count(DISTINCT CASE societes.nom WHEN 'S1' THEN cp_contrat END), > 'S2'=count(DISTINCT CASE societes.nom WHEN 'S2' THEN cp_contrat END), > 'S3'=count(DISTINCT CASE societes.nom WHEN 'S3' THEN cp_contrat END), > 'S4'=count(DISTINCT CASE societes.nom WHEN 'S4' THEN cp_contrat END) > FROM factures > INNER JOIN mois_comptable ON > mois_comptable.cp_temps = factures.cp_mois_comptable > INNER JOIN groupe ON > factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' > INNER JOIN societes ON > groupe.code_societe = societes.code_societe > INNER JOIN agences ON > groupe.code_agence = agences.code_agence > WHERE > mois_comptable.AAAAMM Between '200303' And '200403' > GROUP BY > agences.nom > > L'idée, c'est d'afficher le nombre de contrats par société et par agence du > groupe > sur une période donnée. C'est donc un tableau croisé (dynamique). > > La requête met environ 60 s à l'execution > > Les jointures sont très rapides et s'éxécute en 4 à 5 seconde maxi > > ainsi : > > SELECT > agences.nom, > count(cp_contrat) > FROM factures > INNER JOIN mois_comptable ON > mois_comptable.cp_temps = factures.cp_mois_comptable > INNER JOIN groupe ON > factures.cle_agence = groupe.cp_societe And groupe.type = 'Agence' > INNER JOIN societes ON > groupe.code_societe = societes.code_societe > INNER JOIN agences ON > groupe.code_agence = agences.code_agence > WHERE > mois_comptable.AAAAMM Between '200303' And '200403' > GROUP BY > agences.nom > > prend 5 secondes > > Les problèmes viennent semble-t-il des Count distinct sur les colonnes > pivot. > > comment puis-je optimiser ça ? > > Merci de votre aide > > Damien > >