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

SAS Base Discussion :

Intégrer un code SQL dans un PROC SQL [SQL]


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 48
    Par défaut Intégrer un code SQL dans un PROC SQL
    * Bonjour, *

    J'ai récupéré un code SQL pour faire une extraction de données que je voudrais mettre dans une table SAS nommée BIDON par exemple sauf que dans ce code j'ai une instruction WITH qui semble déplaire fortement a mon proc sql... Avez vous une solution pour moi s'il vous plait ?
    Voici le code SQL global :
    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
    WITH  VALUE AS(
            SELECT *
            FROM (VALUES (DATE('2012-01-01'), DATE('2012-02-01'))
            ) AS VALUE(DATE_INCLUSIVE, DATE_EXCLUSIVE)
    )
     
    SELECT  DATESOMMAIRE,
            FIID,
            TYPECOMPTE,
            CODEJURIDICTION,
            NOMBRETRANSACTION,
            MONTANTNET,
            -- Somme Interchange Net / Somme du montant net
            DECIMAL(INTERCHANGENET / NULLIF(MONTANTNET, DECIMAL(0, 25, 12)), 15, 2) AS MONTANTINTERCHANGENET
    FROM
    (
            SELECT  DATESOMMAIRE,
                    FIID,
                    TYPECOMPTE,
                    CODEJURIDICTION,
                    -- Somme du nombre de transaction
                    SUM(COUNT_OF_IDTRANSACTION) AS NOMBRETRANSACTION,
                    -- Somme du montant net
                    DECIMAL(SUM(SUM_MONTANT_NET), 15, 2) AS MONTANTNET,
                    DECIMAL(SUM(SUM_INTERCHANGE_NET), 25, 12) AS INTERCHANGENET
     
            FROM 
            (
                    SELECT 
                            --DATE (DCALENDRIER.ANNEE || '-' || DCALENDRIER.MOIS || '-01') AS DATESOMMAIRE,
                            --DATEDEPOT - DAY(DATEDEPOT - 1 DAY) DAYS AS DATESOMMAIRE,
                            DATESQL - DAY(DATESQL - 1 DAY) DAYS AS DATESOMMAIRE,
                            LEFT(FTRANSACTION.NOCPTE, 6) AS FIID,
                            FCOMPTES.TYPECOMPTE,
                            FTRANSACTION.CODEJURIDICTION,
                            -- Compte total du nombre de transaction / criètre de la clause GROUP BY
                            COUNT(FTRANSACTION.IDTRANSACTION) AS COUNT_OF_IDTRANSACTION,
                            -- Somme du montant * facteur négatif / criètre de la clause GROUP BY
                            -- facture négative = (-1 ou 1)
                            DECIMAL(SUM(MONTANT * FACTEURNEGATIF), 25, 12) AS SUM_MONTANT_NET,
                            -- Taux Interchange / 100 * somme du montant net
                            DECIMAL(FTRANSACTION.TAUXINTERCHANGE / DECIMAL(100, 5, 2) * NULLIF(SUM(FTRANSACTION.MONTANT * FTRANSACTION.FACTEURNEGATIF), 0), 25, 12) AS SUM_INTERCHANGE_NET
     
                    FROM (
                            SELECT  DATESQL,
                                    CHAR(LEFT(NUMCARTE, 13), 13) AS NOCPTE,
                                    FTRANSACTION.IDTRANSACTION,
                                    FTRANSACTION.MONTANT,
                                    DTYPETRANSACTION.FACTEURNEGATIF,
                                    DCODEINTERCHANGE.TAUXINTERCHANGE,
                                    DCODEINTERCHANGE.CODEJURIDICTION
                                    --DATE (DCALENDRIER.ANNEE || '-' || DCALENDRIER.MOIS || '-01') AS DATESOMMAIRE
     
                            FROM DTM.FTRANSACTION AS FTRANSACTION
     
                            INNER JOIN DTM.DCODEINTERCHANGE AS DCODEINTERCHANGE
                            ON DCODEINTERCHANGE.IDCODEINTERCHANGE = FTRANSACTION.IDCODEINTERCHANGE
     
                            INNER JOIN DTM.DTYPETRANSACTION AS DTYPETRANSACTION
                            ON DTYPETRANSACTION.TYPETRANSACTION = FTRANSACTION.TYPETRANSACTION
     
                            INNER JOIN DTM.DCALENDRIER AS DCALENDRIER
                            ON DCALENDRIER.IDDATE = FTRANSACTION.IDDATE
     
                            INNER JOIN VALUE AS VALUE
                            ON 1=1
     
                            WHERE   INDCARTESCD = 'O'
                                    AND TYPECARTE = 'V'
                                    AND FTRANSACTION.TYPETRANSACTION IN (SELECT TYPETRANSACTION FROM DTM.DTYPETRANSACTION WHERE TYPETRANSACTION NOT IN ('25', '26', '27', '28'))
                                    AND DATEDEPOT BETWEEN VALUE.DATE_INCLUSIVE - 1 MONTH AND VALUE.DATE_EXCLUSIVE + 1 MONTH - 1 DAY
                                    AND FTRANSACTION.IDDATE IN (SELECT IDDATE FROM DTM.DCALENDRIER INNER JOIN VALUE AS VALUE ON 1=1 WHERE DATESQL BETWEEN VALUE.DATE_INCLUSIVE AND VALUE.DATE_EXCLUSIVE - 1 DAY)
                                    AND DATESQL BETWEEN VALUE.DATE_INCLUSIVE AND VALUE.DATE_EXCLUSIVE - 1 DAY
     
                            ORDER BY 2
                    ) AS FTRANSACTION
     
                    INNER JOIN DTM.FCOMPTES AS FCOMPTES
                    ON FCOMPTES.NOCPTE = FTRANSACTION.NOCPTE
     
                    GROUP BY DATESQL, FTRANSACTION.NOCPTE, TYPECOMPTE, CODEJURIDICTION, TAUXINTERCHANGE
            )
            GROUP BY DATESOMMAIRE, FIID, TYPECOMPTE, CODEJURIDICTION
     
    )
    ORDER BY DATESOMMAIRE, FIID, TYPECOMPTE, CODEJURIDICTION
     
    FOR READ ONLY
    WITH UR
    * Merci *

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 83
    Par défaut
    Bonjour,

    Tu as deux possibilités :

    - réecrire entièrement la requete en SQL SAS. (en gros prendre chaque requete imbriquée et en faire une table séparée pour mieux comprendre et transformer toutes les fonctions du SGBD d'origine (oracle?) en fonctions SAS)

    - se connecter au SGBD depuis SAS, lancer cette requete et récupérer le résultat dans une table sas. (SQL passethrough).

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 48
    Par défaut
    Bon je vais essayer en passthrough alors ...
    Merci beaucoup

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

Discussions similaires

  1. Intégrer des données excel dans une BD sql server
    Par rashania dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/05/2010, 17h41
  2. Definir un format décimal dans une proc SQL
    Par pierre24 dans le forum SAS Base
    Réponses: 1
    Dernier message: 07/08/2008, 09h36
  3. Récupérer le mois et la date dans u proc SQL
    Par pierre24 dans le forum SAS Base
    Réponses: 2
    Dernier message: 05/08/2008, 10h21
  4. Erreur %goto et proc sql dans une macro
    Par raf64flo dans le forum Macro
    Réponses: 15
    Dernier message: 17/04/2008, 22h40
  5. comment passer du code html dans une requette sql?
    Par vinceH31 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/11/2006, 18h10

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