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 :

Souci sur une variable


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Par défaut Souci sur une variable
    Bonjour
    je pensais avoir solutionné mon problème mais il n'en est rien.
    J'ai réalisé cette extraction de balance agée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    SELECT 
        F_COMPTET.COMPTABILITE AS RECOUVREMENT
      , F_COLLABORATEUR.CO_Nom AS COMMERCIAL
      , F_ECRITUREC.CT_Num AS TIERS
      , F_ECRITUREC.CG_Num AS CENTRALISATION
      , F_COMPTET.CT_Intitule AS INTITULE
      , F_COMPTET.CT_Ape AS TYPE
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) <= 0 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [Non Echu]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 1 and 30 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [1-30]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 31 and 60 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [31-60]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 61 and 90 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [61_90]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 91 and 180 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [91-180]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 181 and 360 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [181-360]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) between 361 and 720 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [361-720]
      , SUM(CASE WHEN datediff(day, EC_Echeance, getdate()) > 720 THEN (CASE WHEN EC_Sens=0 THEN EC_Montant ELSE -1*EC_Montant END)
                 ELSE 0
            END) AS [+720]
      , (CASE WHEN CT_ControlEnc=2 THEN 'Compte bloqué' ELSE '' END) AS [ETAT]
      --, (select DR_Num from F_DRECOUVREMENT inner join F_COMPTET on F_COMPTET.CT_Num=F_DRECOUVREMENT.CT_Num ) AS DR
      FROM
        F_ECRITUREC,
    	F_COMPTET,
    	F_COLLABORATEUR
    	WHERE
        CG_Num BETWEEN 4110000 AND 4119999
    	AND EC_Lettre <>1
        AND YEAR (JM_Date)>=2018
    	AND F_ECRITUREC.CT_Num=F_COMPTET.CT_Num
    	AND F_COMPTET.CO_No=F_COLLABORATEUR.CO_No
    	GROUP BY
        F_COMPTET.COMPTABILITE
      , F_COLLABORATEUR.CO_Nom
      , F_ECRITUREC.CT_Num
      , F_ECRITUREC.CG_Num
      , F_COMPTET.CT_Intitule
      , F_COMPTET.CT_Ape
      , F_COMPTET.CT_ControlEnc
    Ma sous requête en rouge me retourne une erreur car elle retourne plusieurs valeurs en fait ce que je voudrais c'est si un client a un dossier de recouvrement et que ce dossier est actif (ce champ est géré dans une table encore à part) mettre soit 1 sur ma ligne soit afficher le numéro de dossier de recouvrement.
    Si vous avez une idée merci pour votre aide.
    bonne journée

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 139
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CASE 
        WHEN ((select count(DR_Num) from F_DRECOUVREMENT inner join F_COMPTET on F_COMPTET.CT_Num=F_DRECOUVREMENT.CT_Num ) ) > 0 THEN (select MAX(DR_Num) from F_DRECOUVREMENT inner join F_COMPTET on F_COMPTET.CT_Num=F_DRECOUVREMENT.CT_Num ) 
        ELSE 1
    END AS DR

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Par défaut
    Merci beaucoup dans mon cas le count sera obligatoirement supérieur à 0 car le tiers existe toujours dans les deux tables (F_COMPTET et F_DRECOUVREMENT) et donc les dossiers.
    En fait j'ai les tables F_COMPTET, F_DRECOUVREMENT et F_DRECOUVREMENTIV les tables F_COMPTET et F_DRECOUVREMENT sont en corrélation sur le champ CT_Num et les tables F_DRECOUVREMENT et F_DRECOUVREMENTIV sur le champ DR_Num (la table F_DRECOUVREMENTIV contient le statut du dossier (1 en cours, 2 réalisé, 3 cloturé).

    Ce que je souhaite c'est avoir sur la ligne client de ma balance un flag qui prenne la valeur 0 ou 1 pour m'indiquer si oui ou non j'ai un dossier en cours pour le client.

    J'ai essayé avec un WHERE EXISTS mais là encore je me retrouve avec un count forcément positif.
    Ma première idée à la base était de déclarer une variable et par défaut la mettre à zéro et ensuite aller lire ma table F_DRECOUVREMENT vérifier si j'ai un dossier pour le client si oui allez contrôler sur F_DRECOUVREMENTIV son statut et si le statut était égal à 1 ou 2 je mettais ce flag à 1.

    Mais la je séche

    merci encore

  4. #4
    Membre confirmé Avatar de i.chafai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Décembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    SELECT
           t.COMPTABILITE  as RECOUVREMENT,
           c.CO_Nom AS           COMMERCIAL ,
           e.CT_Num AS           TIERS ,
           e.CG_Num AS           CENTRALISATION ,
           t.CT_Intitule AS      INTITULE ,
           t.CT_Ape AS           TYPE ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) <= 0
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [Non Echu] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 1 AND 30
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [1-30] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 31 AND 60
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [31-60] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 61 AND 90
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [61_90] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 91 AND 180
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [91-180] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 181 AND 360
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [181-360] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) BETWEEN 361 AND 720
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [361-720] ,
           SUM(CASE
                   WHEN DATEDIFF(day , EC_Echeance , GETDATE()) > 720
                   THEN(CASE
                            WHEN EC_Sens = 0
                            THEN EC_Montant
                            ELSE-1 * EC_Montant
                        END)
                   ELSE 0
               END) AS           [+720] ,
           (CASE
                WHEN CT_ControlEnc = 2
                THEN 'Compte bloqué'
                ELSE ''
            END) AS              ETAT ,
           isnull(d.nbre , 0) AS nbre
    FROM
         F_ECRITUREC AS e
         INNER JOIN F_COMPTET AS t ON e.CT_Num = t.CT_Num
         LEFT JOIN F_COLLABORATEUR AS c ON t.CO_No = c.CO_No
         LEFT JOIN ( SELECT
                            COUNT('*') AS nbre ,
                            CT_Num
                     FROM
                          F_DRECOUVREMENT AS d
                     WHERE  (d.DR_Statut = 1)
                     GROUP BY
                              CT_Num ) AS d ON d.CT_Num = t.CT_Num
    WHERE(e.CG_Num BETWEEN 4110000 AND 4119999)
         AND (e.EC_Lettre <> 1)
         AND (YEAR(e.JM_Date) >= 2018)
    GROUP BY
             c.CO_Nom ,
             e.CT_Num ,
             e.CG_Num ,
             t.CT_Intitule ,
             t.CT_Ape ,
             t.CT_ControlEnc ,
    	    t.COMPTABILITE,
             d.nbre;
    J'ai changer la jointure entre F_Comptet et F_Colloaborateur en left join car avec inner join les clients sans representant affecté ne s'affichent pas
    Sur Sage vous pouvez aussi filtrer sur la colonne F_Compteg.N_Nature = 1 pour remplacer le filtre CG_Num BETWEEN 4110000 AND 4119999.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Par défaut
    Merci
    je test et reviens vers vous
    bon weekend

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 17
    Par défaut
    Cela fonctionne parfaitement merci
    Je n'avais pas pensé à la nature du tiers excellent choix car j'ai une base qui malheureusement n'a pas le même nombre de caractères dans le plan comptable et chaque fois je modifiais le BETWEEN donc plus faile maintenant pour moi de standardiser.
    A bientôt
    bon Dimanche

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  2. [2.0] Get sur une variable d'application qui bug ??
    Par brousaille dans le forum ASP.NET
    Réponses: 8
    Dernier message: 14/03/2006, 06h08
  3. [Tableaux] action sur une variable ->
    Par mactech dans le forum Langage
    Réponses: 9
    Dernier message: 15/12/2005, 19h01
  4. Opération sur une variable
    Par pcdj dans le forum Linux
    Réponses: 2
    Dernier message: 29/10/2005, 21h02
  5. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 16h39

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