Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 18/02/2011, 11h47   #1
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Par défaut créer Requête récursive

Bonjour,
Je veux à chaque fois utiliser le résultat retourné par ma requête,et retourner enfin tous les résultats.Imbriqué plusieurs requêtes puis unir chaque partie c'est trop long et lent.
Ma requête est comme suit:
Code :
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
sql
SELECT code,DEBTF, FINTF ,DEBRD,FINRD,DEBRP, FINRP,DEBTX, FINTX
      ,DEBTF AS deb_PR,Dateadd(day,Min(aa.NbJours),DEBTF) AS fin_PR 
FROM
(SELECT *,
DateDiff(day,CONVERT(DateTime,DEBTF,120),CONVERT(DateTime,DateTest ,120)) AS NbJours
 FROM
(
SELECT code, DEBTF, FINTF, DEBRD AS DateTest FROM MaTable
UNION 
SELECT code, DEBTF, FINTF, FINRD AS DateTest FROM MaTable
UNION 
SELECT code, DEBTF, FINTF, DEBRP AS DateTest FROM MaTable
UNION 
SELECT code, DEBTF, FINTF, FINRP AS DateTest FROM MaTable
UNION 
SELECT code, DEBTF, FINTF, DEBTX AS DateTest FROM MaTable
UNION 
SELECT code, DEBTF, FINTF, FINTX AS DateTest FROM MaTable
) AS SousRequete
WHERE DateTest < FINTF
) aa
WHERE aa.NbJours > 0 
GROUP BY code
,DEBTF, FINTF,DEBRD,FINRD,DEBRP, FINRP,DEBTX, FINTX
Je veux appliquer la même procédure sur la nouvelle colonne calculée (ici fin_ PR) et retourner tt les colonnes.
J'ai pensé aux requêtes récursives mais je peux pas inclure dedans des agrégations ni des unions.Donc ça pas marché.

Des suggestions?
Merci de m'aider.
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 09h52   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Merci d'indenter correctement votre requête comme ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT code, DEBTF, FINTF, DEBRD, FINRD, DEBRP, FINRP, DEBTX, FINTX,
       DEBTF AS deb_PR,Dateadd(day,Min(aa.NbJours),DEBTF) AS fin_PR 
FROM   (SELECT *, DateDiff(day,CONVERT(DateTime,DEBTF,120),CONVERT(DateTime,DateTest ,120)) AS NbJours
        FROM   (SELECT code, DEBTF, FINTF, DEBRD AS DateTest FROM MaTable
                UNION 
                SELECT code, DEBTF, FINTF, FINRD AS DateTest FROM MaTable
                UNION 
                SELECT code, DEBTF, FINTF, DEBRP AS DateTest FROM MaTable
                UNION 
                SELECT code, DEBTF, FINTF, FINRP AS DateTest FROM MaTable
                UNION 
                SELECT code, DEBTF, FINTF, DEBTX AS DateTest FROM MaTable
                UNION 
                SELECT code, DEBTF, FINTF, FINTX AS DateTest FROM MaTable) AS SousRequete
        WHERE DateTest < FINTF) aa
WHERE  aa.NbJours > 0 
GROUP  BY code, DEBTF, FINTF, DEBRD, FINRD, DEBRP, FINRP, DEBTX, FINTX
On y verra plus clair...

C'est normal que cela soit lent :
1) vous faites une opération inutile et couteuse avec le GROUP BY. GROUP BY n'a d'intérêt que si vous avez des opérations d'agrégation ce qui n'est pas la cas ici.
2) vous faites l'opération UNION qui dédoublonne. Cela n'est sans doute pas nécessaire. Faites UNION ALL si possible.

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 * * * * *
SQLpro 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 09h06.


 
 
 
 
Partenaires

Hébergement Web