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 :

[MSSQL2000] Importation et repartition


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut [MSSQL2000] Importation et repartition
    Bonjour a tous,

    Je dois importer toutes les semaines une balance comptable (1500 lg) et les affecter dans des comptes suivants des règles d'affectations (900 lg).

    Voici un exemple de données (compte, ana, montant)
    612000 26045 260.50
    612000 12345 130.40
    612101 33556 330.50
    654000 26346 33.55
    654102 28333 180.10

    Voici quelques règles (compte, ana, nouvelle affecation)
    6????? ????? T124
    6????? ??5?? T028
    6????? 26??? T033
    612??? ????? T125
    612??? ??5?? T126

    Voici le résultat que je dois optenir (compte, montant, affectation)
    612000 260.50 T125 (Regle 612??? ?????)
    612000 130.40 T125 (Règle 612??? ?????)
    612101 330.50 T126 (Règle 612??? ??4??)
    654000 33.55 T033 (Règle 6????? 26???)
    654102 180.10 T124 (Règle 6????? ?????)

    Le but etant d'importer les données via DTS et d'obtenir une table des données et une table des règles et ensuite de faire une requette. Ou peut être lors de l'import DTS de formater les affectations.

    Je planche sur ce problème depuis quelques temps sans trouver de solutions.

    Merci pour votre aide, cela devient urgent

    Tornade69

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 994
    Billets dans le blog
    6
    Par défaut
    Fastoche... Mais il manquait une précision que vous n'avez pas donné et que j'ai rajouté : l'affectation doiit reposer sur le compte le plus précis possible...

    Voici la solution et je vous explique comment elle fonctionne :

    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
    CREATE TABLE T_COMPTE_CPT
    (CPT_COMPTE          CHAR(6),
     CPT_ANA             CHAR(5),
     CPT_MONTANT         DECIMAL(16,2))
     
    INSERT INTO T_COMPTE_CPT VALUES ('612000', '26045', 260.50)
    INSERT INTO T_COMPTE_CPT VALUES ('612000', '12345', 130.40)
    INSERT INTO T_COMPTE_CPT VALUES ('612101', '33556', 330.50)
    INSERT INTO T_COMPTE_CPT VALUES ('654000', '26346', 33.55)
    INSERT INTO T_COMPTE_CPT VALUES ('654102', '28333', 180.10)
     
    CREATE TABLE T_AFFECTATION_AFC
    (AFC_COMPTE          CHAR(6),
     AFC_ANA             CHAR(5),
     AFC_AFFECT          CHAR(4),
     AFC_PRIORITE        SMALLINT)
     
    INSERT INTO T_AFFECTATION_AFC VALUES ('6_____', '_____', 'T124', 1024)                      
    INSERT INTO T_AFFECTATION_AFC VALUES ('6_____', '__5__', 'T028', 1028)
    INSERT INTO T_AFFECTATION_AFC VALUES ('6_____', '26___', 'T033', 1048)
    INSERT INTO T_AFFECTATION_AFC VALUES ('612___', '_____', 'T125', 1788)
    INSERT INTO T_AFFECTATION_AFC VALUES ('612___', '__5__', 'T126', 1792)
     
    SELECT CPT_COMPTE, CPT_ANA, CPT_MONTANT, AFC_AFFECT
    FROM   T_COMPTE_CPT C
           INNER JOIN T_AFFECTATION_AFC A
                 ON     CPT_COMPTE LIKE AFC_COMPTE
                    AND CPT_ANA    LIKE AFC_ANA
    WHERE  AFC_PRIORITE = (SELECT MAX(AFC_PRIORITE)
                           FROM   T_COMPTE_CPT C2
                                  INNER JOIN T_AFFECTATION_AFC A2
                                        ON     CPT_COMPTE LIKE AFC_COMPTE
                                           AND CPT_ANA    LIKE AFC_ANA
                           WHERE  C2.CPT_COMPTE = C.CPT_COMPTE
                             AND  C2.CPT_ANA = C.CPT_ANA
                             AND  C2.CPT_MONTANT = C.CPT_MONTANT);
     
    CPT_COMPTE CPT_ANA CPT_MONTANT        AFC_AFFECT 
    ---------- ------- ------------------ ---------- 
    654102     28333   180.10             T124
    654000     26346   33.55              T033
    612101     33556   330.50             T126
    612000     26045   260.50             T125
    612000     12345   130.40             T125
    Pour trouver la correspondance un like avec les joker "_" plutôt que ? est nécessaire.

    Maintenant comme vous pouvez le constater il peut y avoir des ambiguités d'affectation. Elles ont été résolues par l'ajout d'une information que j'ai noté AFC_PRIORITE... Mais la question précise est : quelle valeur figure dans cette colonne ? Comment cette olonne a t-elle été calculée ???

    Simple : en affectant un poids binaire aux chiffres du compte et du ana...

    Comme ceci :
    pour chaque chiffre exprimé de la concaténation compte/ana on affecte un poids binaire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -------------------- COMPTE --------------- ANA ------
    CHIFFRE :    6   5   4   3  2  1       5  4  3  2  1
              1024 512 252 128 64 32   |  16  8  4  2  1
    Par exemple pour le compte/ana 6????? / 26??? => 1024 16 8, que l'on additionne pour donner : 1024 + 16 + 8 = 1048.

    Le calcul de ce poids peut d'ailleurs se faire dans la requête ou bien dans une fonction utilisateur...

    Exemple :

    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
    -- fonction de calcul des poids
    ALTER FUNCTION F_POIDS_COMPTE (@DATA VARCHAR(32))
    RETURNS INTEGER
    AS
    BEGIN
       IF @DATA IS NULL RETURN NULL;
       DECLARE @OUT INT, @I INT;
       SELECT @OUT = 0, @I = 0;
       SET @DATA = REVERSE(@DATA);
       WHILE @I < LEN(@DATA)
       BEGIN
          IF SUBSTRING(@DATA, @I + 1, 1) <> '_'
             SET @OUT = @OUT + POWER(2, @I);
          SET @I = @I + 1;
       END;
       RETURN @OUT;
    END
    GO
     
    -- vérification
    SELECT *, dbo.F_POIDS_COMPTE(AFC_COMPTE+AFC_ANA)
    FROM   T_AFFECTATION_AFC
     
    -- utilisation en UPDATE :
    UPDATE T_AFFECTATION_AFC
    SET AFC_PRIORITE = dbo.F_POIDS_COMPTE(AFC_COMPTE+AFC_ANA)
    CQFD...


    Et pour un cours sur SQL... mon site web, comme mes bouquins peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Fastoche (mort de honte !!)

    Je vais tester; mais je n'ai pas de doute !

    lequel des 2 bouquins ?

    Normalement c'est moi qui dis Fastoche à mes utilisateurs, une grande leçon d'humilitée. J'y ai passé des heures a chercher. Mais bon, les fonctions utilisées sont celle que je maitrise le moins. Faut encore que je potasse, y a toujours plus fort que soit, surtout au niveau auquel je pratique !!!

    Un grand merci à toi

    A+

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 994
    Billets dans le blog
    6
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  2. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  3. [DEV-C++]#import de fichier .tlb
    Par pdl dans le forum Dev-C++
    Réponses: 6
    Dernier message: 19/07/2002, 22h46
  4. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  5. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

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