none
Requete sql imbriquees RRS feed

  • Question

  • Bonjour,

    je rencontre actuellement une difficulte dans le resultat d'une requete

    Je vous soumet la requete :

    SELECT DISTINCT (SELECT        SUM(Accompte_Commande) AS Commande
                                              FROM            AFFAIRES_Echeancier
                                              WHERE        (Date_Commande > '09/07/2015') AND (Date_Commande <= '31/07/2015') AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN') AND (SUBSTRING(Piece_Commande, 1, 2) = 'BC')) +
                                 (SELECT        SUM(Accompte_Premier_Essai) AS Accompte_Premier_Essai
                                   FROM            AFFAIRES_Echeancier AS AFFAIRES_Echeancier_2
                                   WHERE        (Date_Premier_Essai > '09/07/2015') AND (Date_Premier_Essai <= '31/07/2015') AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN') AND (SUBSTRING(Piece_Premier_Essai, 1, 2) = 'BC')) 
                             AS Expr1
    FROM            AFFAIRES_Echeancier AS AFFAIRES_Echeancier_1
    WHERE        (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')

    Mon problème est que le résultat de la première requête imbriquée est NULL et donc l'ajout de la deuxième requête imbriquée a la première me donne un résultat NULL alors que le résultat devrait être '22222'

    je voulais savoir comment il était possible de ne pas prendre en compte dans l’opération un résultat null d'une requête imbrique

    Merci par avance pour vos reponses


    Xavier

    jeudi 9 juillet 2015 10:03

Réponses

  • Oui c'est normal, NULL est l'absence de valeur, c'est le néant :). Donc le néant + 1 = néant.

    Il faut donc réécrire votre requête de la façon suivante

    SELECT DISTINCT
      (
    	SELECT ISNULL(SUM(Accompte_Commande),0) AS Commande
    	FROM AFFAIRES_Echeancier
    	WHERE (Date_Commande > '09/07/2015')
    		AND (Date_Commande <= '31/07/2015')
    		AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')
    		AND (SUBSTRING(Piece_Commande, 1, 2) = 'BC')) +
      (
      SELECT ISNULL(SUM(Accompte_Premier_Essai),0) AS Accompte_Premier_Essai
       FROM AFFAIRES_Echeancier AS AFFAIRES_Echeancier_2
       WHERE (Date_Premier_Essai > '09/07/2015')
         AND (Date_Premier_Essai <= '31/07/2015')
         AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')
         AND (SUBSTRING(Piece_Premier_Essai, 1, 2) = 'BC')) AS Expr1
    FROM AFFAIRES_Echeancier AS AFFAIRES_Echeancier_1
    WHERE (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')

    Ce phénomène se retrouve dans la concaténation de chaine de caractère.

    • Proposé comme réponse Grégory_Nail mercredi 15 juillet 2015 10:02
    • Marqué comme réponse fanchy samedi 18 juillet 2015 10:06
    jeudi 9 juillet 2015 13:35

Toutes les réponses

  • Oui c'est normal, NULL est l'absence de valeur, c'est le néant :). Donc le néant + 1 = néant.

    Il faut donc réécrire votre requête de la façon suivante

    SELECT DISTINCT
      (
    	SELECT ISNULL(SUM(Accompte_Commande),0) AS Commande
    	FROM AFFAIRES_Echeancier
    	WHERE (Date_Commande > '09/07/2015')
    		AND (Date_Commande <= '31/07/2015')
    		AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')
    		AND (SUBSTRING(Piece_Commande, 1, 2) = 'BC')) +
      (
      SELECT ISNULL(SUM(Accompte_Premier_Essai),0) AS Accompte_Premier_Essai
       FROM AFFAIRES_Echeancier AS AFFAIRES_Echeancier_2
       WHERE (Date_Premier_Essai > '09/07/2015')
         AND (Date_Premier_Essai <= '31/07/2015')
         AND (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')
         AND (SUBSTRING(Piece_Premier_Essai, 1, 2) = 'BC')) AS Expr1
    FROM AFFAIRES_Echeancier AS AFFAIRES_Echeancier_1
    WHERE (SUBSTRING(Numero_Affaire, 11, 2) = 'MN')

    Ce phénomène se retrouve dans la concaténation de chaine de caractère.

    • Proposé comme réponse Grégory_Nail mercredi 15 juillet 2015 10:02
    • Marqué comme réponse fanchy samedi 18 juillet 2015 10:06
    jeudi 9 juillet 2015 13:35
  • Bonjour Gregory

    Un grand merci pour la reponse

    effectivement l'utilisation de fonction ISNULL resoud bien des probleme mais il est vrai que la longueur de la requete ne favorise pas la resolution des erreurs d'ecriture

    Encore merci pour la reponse et l'explication


    Xavier

    samedi 18 juillet 2015 10:06