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 :

Transformer une formule Excel en SQL [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de PrinceCorwin
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Mars 2012
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 340
    Points : 701
    Points
    701
    Par défaut Transformer une formule Excel en SQL
    Bonjour,

    Je cherche à transformer une formule Excel en language SQL.
    J'extrai chaque semaine depuis la base, des données sur des suivis de fabrication, et je crée des TCD pour avoir des indicateurs clairs.

    Seulement, j'ai des doublons dans les lignes de la base pour des Ordres de fabrication multi-articles.
    Or quand je somme les temps je multiplie par autant de lignes dupliquées.

    Je fais donc un calcul "savant" pour avoir une moyenne de temps par nombre de lignes identiques.
    La formule est A2 = F2 / NB.SI.ENS(NumeroSuivi;B2;NumeroOrdre;C2;Ope;D2;Matricule;E2)

    Ce qui donne dans l'exemple suivant :
    TempsMoyen NumeroSuivi NumeroOrdre Operation matricule Temps
    0,033333333 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 1322 0,1
    0,033333333 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 1322 0,1
    0,033333333 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 1322 0,1
    0,056666667 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 974 0,1
    0,056666667 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 974 0,1
    0,056666667 SF-14-19-SI1-0071126 OF-14-SI1-015047 5 974 0,1
    0,825 SF-14-19-SI1-0071123 OF-14-SI1-015048 5 1550 0,33
    0,825 SF-14-19-SI1-0071123 OF-14-SI1-015048 5 1550 0,33
    0,825 SF-14-19-SI1-0071123 OF-14-SI1-015048 5 1550 0,33
    0,825 SF-14-19-SI1-0071123 OF-14-SI1-015048 5 1550 0,33
    De cette façon, j'ai la bonne somme dans mon TCD

    Le nombre de lignes varie selon les critères de date demandée et vont de 5k jusqu'à 50k+.
    Quand je lance le calcule sur 50k lignes, ca prends un certain temps...

    C'est pour cela que je voudrais intégrer cette formule directement dans l'extraction SQL, si possible bien sur.

    Vous remerciant pour vos propositions futures de code SQL.
    JCB

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Il faudrait la structure de vos tables, ainsi que la requête que vous avez déjà écrite.

    Un petit jeu d'essai sous forme d'INSERT INTO serait aussi utile

  3. #3
    Membre éclairé Avatar de PrinceCorwin
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Mars 2012
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 340
    Points : 701
    Points
    701
    Par défaut
    Bonjour,

    Tout d'abord merci pour votre intérêt.
    la structure de la base de données c'est l'ERP Sage X3 v6.5. Donc beaucoup, beaucoup de tables ... et encore plus de champs...
    Ma requête est la suivante :
    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
    SELECT
    MKO.IPTDAT_0 as 'Date Imputation',
    substring(convert(varchar(4),YEAR(MKO.IPTDAT_0)),3,2) + CASE
    WHEN DATEPART(WK,MKO.IPTDAT_0)<10 then '0'+CAST(DATEPART(WK,MKO.IPTDAT_0) AS VARCHAR(1))
    WHEN DATEPART(WK,MKO.IPTDAT_0)>=10 then CAST(DATEPART(WK,MKO.IPTDAT_0) AS VARCHAR(2))
    END as 'Semaine Saisie',
    ITM.TCLCOD_0 as 'Catégorie',
    ITM.TSICOD_0 as 'BU',
    AX1.TEXTE_0 as 'Famille Stat 2',
    AX2.TEXTE_0 as 'Famille Stat 3',
    AX3.TEXTE_0 as 'Famille Stat 4',
    AX4.TEXTE_0 as 'Famille Stat 5',
    ITM.ITMREF_0 as 'Référence Article',
    ITM.ITMDES1_0 as 'Désignation Article',
    MKO.ITMREF_0 as 'Gamme',
    MKO.MFGTRKNUM_0 as 'Numéro Suivi',
    MKO.MFGNUM_0 as 'Numéro Ordre',
    MKO.OPENUM_0 as 'Séquence',
    MKO.CPLWST_0 as 'Poste de Charge',
    AWK.TEXTE_0 as 'Intitulé Poste de Charge',
    WRK.WCR_0 as 'Centre de Charge',
    ACC.TEXTE_0 as 'Intitulé Centre de Charge',
    MKO.EMPNUM_0 as 'Matricule Employé',
    MKO.CPLOPETIM_0 as 'Temps Déclaré',
    MFG.ROUNUM_0 as 'Gamme Lancée',
    MKO.CPLQTY_0 as 'Quantité Réalisé OK',
    MFO.EXTUNTTIM_0 as 'Temps Unitaire Théorique',
    MFO.EXTUNTTIM_0 * MKO.CPLQTY_0 as 'Temps Ligne Théorique',
    MFG.MFGSTA_0 as 'Statut Ordre de Fabrication',
    MFG.MFGTRKFLG_0 as 'FLAG Suivi',
    TMA.EMPDES_0 as 'Nom Employé',
    TMA.ZBURAT_0 as 'BU de Rattachement',
    TMA.ZSERAT_0 as 'Secteur de Rattachement',
    MFI.ITMREF_0 as 'Référence Article Lancé',
    MKO.DACHOU_0 as 'Heure Déclaration',
    MKO.CREUSR_0 as 'Opérateur Déclaration'
     
    FROM   MFGOPETRK MKO 
    	INNER JOIN MFGITM MFI ON MKO.MFGNUM_0 = MFI.MFGNUM_0 
    	INNER JOIN MFGOPE MFO ON MKO.MFGNUM_0 = MFO.MFGNUM_0 AND MKO.OPENUM_0 = MFO.OPENUM_0 AND MKO.OPESPLNUM_0 = MFO.OPESPLNUM_0
    	LEFT OUTER JOIN WORKSTATIO WRK ON MKO.CPLWST_0 = WRK.WST_0 AND MKO.MFGFCY_0 = WRK.WCRFCY_0 
    	LEFT OUTER JOIN TABMAT TMA ON MKO.EMPNUM_0 = TMA.EMPNUM_0 
    	INNER JOIN MFGHEAD MFG ON MFI.MFGNUM_0 = MFG.MFGNUM_0 
    	INNER JOIN ITMMASTER ITM ON MFI.ITMREF_0 = ITM.ITMREF_0
    	INNER JOIN TABWRKCTR TWC ON WRK.WCR_0 = TWC.WCR_0
    	LEFT OUTER JOIN AVWTEXTRA AX1 ON 
    		 AX1.IDENT1_0 = '21' and
    		 ITM.TSICOD_1 = AX1.IDENT2_0 and
    		 AX1.LAN_0 = 'FRA' and
    		 AX1.ZONE_0 = 'LNGDES' and
    		 AX1.CODFIC_0 = 'ATABDIV'
    	LEFT OUTER JOIN AVWTEXTRA AX2 ON 
    		 AX2.IDENT1_0 = '22' and
    		 ITM.TSICOD_2 = AX2.IDENT2_0 and
    		 AX2.LAN_0 = 'FRA' and
    		 AX2.ZONE_0 = 'LNGDES' and
    		 AX2.CODFIC_0 = 'ATABDIV'
    	LEFT OUTER JOIN AVWTEXTRA AX3 ON 
    		 AX3.IDENT1_0 = '23' and
    		 ITM.TSICOD_3 = AX3.IDENT2_0 and
    		 AX3.LAN_0 = 'FRA' and
    		 AX3.ZONE_0 = 'LNGDES' and
    		 AX3.CODFIC_0 = 'ATABDIV'
    	LEFT OUTER JOIN AVWTEXTRA AX4 ON 
    		 AX4.IDENT1_0 = '24' and
    		 ITM.TSICOD_4 = AX4.IDENT2_0 and
    		 AX4.LAN_0 = 'FRA' and
    		 AX4.ZONE_0 = 'LNGDES' and
    		 AX4.CODFIC_0 = 'ATABDIV'
    	LEFT OUTER JOIN AVWTEXTRA AWK ON 
    		 AWK.IDENT2_0 = 'SI1' and
    		 MKO.CPLWST_0 = AWK.IDENT1_0 and
    		 AWK.LAN_0 = 'FRA' and
    		 AWK.ZONE_0 = 'WSTDESAXX' and
    		 AWK.CODFIC_0 = 'WORKSTATIO'
    	LEFT OUTER JOIN AVWTEXTRA ACC ON 
    		 WRK.WCR_0 = ACC.IDENT1_0 and
    		 ACC.LAN_0 = 'FRA' and
    		 ACC.ZONE_0 = 'WCRDESAXX' and
    		 ACC.CODFIC_0 = 'TABWRKCTR'
    Les liaisons AVWTEXTRA sont des requêtes stockées dans la base X3.
    J'espère que cela pourra vous aider.

    Merci
    JCB

  4. #4
    Membre éclairé Avatar de PrinceCorwin
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Mars 2012
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 340
    Points : 701
    Points
    701
    Par défaut
    Bonjour,

    j'ai trouvé la solution en écrivant les messages précédents...
    En fait, je cherchais à compter les lignes en doubles, car les sont "répétées" pour chaque article lancé dans l'Ordre de fabrication.
    Dans la table des entêtes des Ordres de Fabrication, il existe un champs qui dénombre le nombre d'articles lancés...

    Encore plus facile que ce que je pensais, au final !

    Merci à vous pour votre intérêt et bonne journée.
    JCB

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

Discussions similaires

  1. Transformé une formule Excel en script VBA ?
    Par SFLEY dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/01/2007, 11h48
  2. Simplifier une formule excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/04/2006, 09h10
  3. [debutant] Traduite une formule excel dans access
    Par zelob dans le forum Access
    Réponses: 5
    Dernier message: 25/02/2006, 05h17
  4. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  5. Transformer une Bdd Excel en Bdd Access
    Par Golork dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/08/2005, 16h40

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