IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

sous requete qui prend du temps


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 48
    Par défaut sous requete qui prend du temps
    Bonsoir mes amis,
    je suis encore nouveau avec SQL-Server et T-SQL, et j'essaie de réaliser une requete qui me prend énormement de temps car dedans je réalise beacoups de sous requetes; je donnerai une partie dont si j'arrive à répeter la répétition de la sous requete je diminuerai le temps d'execution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select X,Y,Z,...,
             Case when SUM(Case whene ......end )=0 then
                      valeur_x
                     else   SUM(Case whene ......end )
             End as 'toto'
    Si vous avez bien remarqué la sous requete SUM(Case whene ......end ) qui se repete et elle demande du temps;et le meme principe reste dans la suite de ma requete;j'aime bien trouver une solution(car ma requette demande 7min pour s'exécuter et c grave).
    merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Poste toute la requete ainsi que la taille des tables et les différents index dessus, on a aucun moyen de voir quoi que ce soit avec ton exemple
    merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 48
    Par défaut
    je m'excuse je ne peux pas envoyer toute la requete (raison de confidentialité pour l'entreprise où je passe mon stage), mais ce que je cherche c la possibilité d'affecter le resultat de la sous requete à une variable pour l'utiliser après, mais le pb je ne peux pqs utiliser cette solution à l'intérieur d'une requete.
    et merci.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    tu peux utiliser les variables de type table pour stocker des résultats intermédiaires (en général, cela permet d'avoir des requêtes plus simples et de moins affoler l'optimiseur)

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare @vartable table ( 
    	col1 type, col2 type ...)
     
    select cols...
    into @vartable
    from tes tables ...
    where blahblah ...
     
    select .....
    from @vartable
    si cela peut t'aiguilller ....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 48
    Par défaut
    mais je ne peux pas faire un à l'intérieur d'une requete.

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Citation Envoyé par abdoing
    je m'excuse je ne peux pas envoyer toute la requete (raison de confidentialité pour l'entreprise où je passe mon stage), mais ce que je cherche c la possibilité d'affecter le resultat de la sous requete à une variable pour l'utiliser après, mais le pb je ne peux pqs utiliser cette solution à l'intérieur d'une requete.
    et merci.
    Dans ce cas, poste le script de création d'une psodo-table avec des psodo données et une psodo-requête, sinon nous ne pouvons rien.

    Quelle est la version de votre SGBDR ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 48
    Par défaut
    j'utilise SQL Server 2000,ok je donnerai un exemlpe de requete et c à vous de voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select a.col1,a.col2,c.col3,case when SUM( case when a.col3='X' and a.col4>=12  then a.col5 else 0 end) is null then 0 else SUM( case when a.col3='X' and a.col4>=12  then a.col5 else 0 end) end As 'Srqst' from    table1 a, table2 c where a.col1=c.col4.
    donc ce que je cherche c de ne pas répéter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM( case when a.col3='X' and a.col4>=12  then a.col5 else 0 end)
    et merci.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Tu es en train de réinventer le coalesce là.

    Citation Envoyé par l'aide en ligne
    Returns the first nonnull expression among its arguments.

    Syntax
    COALESCE ( expression [ ,...n ] )
    Donc en français cela veut dire coalesce (champ1, ValeurSiNull)
    Si champ 1 est null alors on utilise ValeurSiNull, sinon on utilise champ1
    Donc ta requete peut devenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.col1,a.col2,c.col3,
     COALESCE	(	SUM	( case when a.col3='X' AND a.col4>=12  
    					  then a.col5 
    					  else 0 end
    					)
    				,0
    			) as Srqst
    FROM    table1 a, table2 c WHERE a.col1=c.col4.
    PS : Tu pourrais indenter ta requete cela nous aiderait à la lire.
    Cordialement
    Soazig

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/05/2009, 10h39
  2. Réponses: 12
    Dernier message: 14/01/2009, 14h44
  3. Sous requete qui ne fonctionne pas
    Par Guillomme dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/10/2007, 15h01
  4. [ASA6]Requetes qui prennent du temps a executer
    Par sboffin dans le forum Sybase
    Réponses: 5
    Dernier message: 16/10/2006, 13h20
  5. [mySQL]Requete qui prend 100 % du CPU et n'aboutit pas
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 20
    Dernier message: 12/10/2005, 09h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo