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

Développement SQL Server Discussion :

Mettre 0 s'il n'ya pas de lignes


Sujet :

Développement SQL Server

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Mettre 0 s'il n'ya pas de lignes
    Bonjour,

    J'ai une requete sql qui fait la somme de quantités sur un mois. Mais il arrive qu'il n'y ai pas lignes sur un mois et là il ne fait pas de lignes de résultats.

    J'aimerai qu'il m'affiche un 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT CONVERT(CHAR(10),DATEPART(m,CONVERT(DATETIME,CAST(Date +19000000 AS varchar(8)),112)),103) AS MOIS,SUM(Quantite) AS QuantiteTotale
    FROM MaTable
    WHERE Reference = @RefInt
    AND CodeClient = @codeClt
    AND Date + 19000000 BETWEEN CAST(CONVERT(CHAR(8), GETDATE(), 112) AS NUMERIC(8, 0))
    					AND CAST(CONVERT(CHAR(8), dbo.Last_Day(GETDATE(),@Detail), 112) AS NUMERIC(8, 0))
    GROUP BY DATEPART(m,CONVERT(DATETIME,CAST(Date +19000000 AS varchar(8)),112))
    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il vous faut pour cela construire une table des mois, ou si vous êtes sous SQL Server 2005 ou 2008, écrire une expression de table commune (CTE) qui vous le procure.
    Vous pourrez ensuite effectuer une demi-jointure sur cette table ou CTE, et traiter le NULL de votre SUM par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNULL(SUM(Quantite), 0)
    Je ne sais pas comment vous allez gérer cela puisque vous avez stockez vos dates en NUMERIC, ce qui est un non-sens, mais je crois vous l'avoir déjà dit.

    Votre requête ne devrait pas tarder à être assez alambiquée

    @++

  3. #3
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Merci pour ta réponse.

    Pour le format des dates je n'ai pas choisis et je ne peus pas le changer.

    Alors il faudrais que j'utilise un with si j'ai bien comprie.

    Un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    With TabMois (Mois)
    (SELECT LaDate WHERE LaDate Between GetDate() and GetDate()+20)
     
    SELECT ...
     
    FROM TabMois
     
    ...
    Mais je n'arrive pas à récupérer les dates. Et je ne sais pas ce qu'est une demi jointure.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    C'est exact

    Pourquoi avez-vous écrit BETWEEN GetDate() AND GetDate()+20 ?
    Votre agrégat (SUM) porte-t-il sur des mois ou des jours ?

    Un petit coup de pouce sur les jointures

    @++

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Merci pour ta réponse.

    J'ai trouvé : j'ai une procédure stockée qui remplis chaque jours une table de dates avec par exemple la place de la semaine de la date -5. Et je fais une jointure avec ma table des commandes. Comme ca j'ai bien une ligne par jours même s'il n'y a pas de commande.

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    D'où la nécessité d'avoir une table de dates dans les bases de données

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre les bons headers pour ne pas être du SPAM
    Par Ceubex dans le forum Langage
    Réponses: 1
    Dernier message: 06/03/2013, 21h39
  2. [XSLT] Trie mettre ceux qui n'en contienne pas à la fin
    Par totoen dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/09/2006, 14h31
  3. Réponses: 4
    Dernier message: 15/02/2006, 11h24
  4. [HTML] [FLASH MX2004] Ne fonctionne pas en ligne
    Par Invité4 dans le forum Flash
    Réponses: 8
    Dernier message: 31/10/2005, 14h53
  5. Réponses: 2
    Dernier message: 12/01/2005, 23h08

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