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

SQL Oracle Discussion :

Formater sql en csv


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut Formater sql en csv
    Bonjour à tous

    Voila j'ai finalisé plusieurs requete afin d'automatiser cette extraction or on me demande préformater les donnes pour pouvoir en extraire un csv.

    Voici la requete :

    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
    SELECT TRUNC (amv_date_mvt, 'dd') "Date du mouvement",amv_societe "Societe", amv_article "Article", art.ART_DESIGNATION "Désignation", amv_magasin "Magasin", 
    amv_analytique "Centre analytique", a.can_designation "Désignation analytique", amv_cf "Atelier", inter.INT_NOM "Intervenant",
    TRUNC (amv_prix,2) "Prix unitaire", amv_quantite "Quantité",TRUNC (amv_prix * amv_quantite,2) "Montant", amv_cpte_cg "Compte",
    rub. RUB_DESIGNATION "Nature" 
    	   FROM ARTICLES_MVTS,
    	   C_ANALYTIQUES a,
    	   ARTICLES art,
    	   INTERVENANTS inter,
    	   RUBRIQUES rub
    	   		WHERE (amv_societe = 'LY'
    				  AND art_societe = 'LY' AND can_societe = 'LY')
    				  AND amv_date_mvt >= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -2))) + 1
    				  AND amv_date_mvt < LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -1))) + 1
    				  AND amv_transac IN (5)
    				  AND a.can_centre=amv_analytique
    				  AND art.ART_ARTICLE = amv_article
    				  AND inter.INT_INTERVENANT = amv_intervenant
    				  AND inter.INT_SOCIETE='LY'
    				  AND rub.RUB_RUBRIQUE = amv_rubrique
    				  AND rub.RUB_SOCIETE ='LY'		  
    ORDER BY amv_date_mvt

  2. #2
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    Si c'est pour exécuter sous SQL*Plus, tu peux tout simplement utiliser les instructions suivantes et faire un SPOOL du résultat:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET COLSEP ';'
    SET TRIMSPOOL ON
    SET PAGESIZE 50000
    Par contre, cela génère des espaces superflus à la fin de chaque colonne.
    Si tu ne veux pas de ces espaces, il faut que tu concatènes tous tes champs en ajoutant le ';' entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col1||';'||col2||';'||col3...

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    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
    SELECT 'Date du Mouvement'||';'||'Societe'||';'||'Article'||';'||'Désignation'||';'||'Magasin'||';'||'Centre analytique'||';'||'Désignation analytique'||';'||'Atelier'||';'||'Intervenant'
    ||';'||'Prix unitaire'||';'||'Quantité'||';'||'Montant'||';'||'Compte'||';'||'Nature' colonnes
    FROM dual
    UNION ALL
    SELECT TRUNC(amv_date_mvt, 'dd')||';'||amv_societe||';'||amv_article||';'||art.ART_DESIGNATION||';'||amv_magasin||';'||amv_analytique||';'||a.can_designation||';'||amv_cf||';'||inter.INT_NOM||';'||TRUNC(amv_prix,2)||';'||amv_quantite||';'||TRUNC (amv_prix * amv_quantite,2)||';'||amv_cpte_cg||';'||rub.RUB_DESIGNATION
             FROM ARTICLES_MVTS,
             C_ANALYTIQUES a,
             ARTICLES art,
             INTERVENANTS inter,
             RUBRIQUES rub
                      WHERE (amv_societe = 'LY'
                              AND art_societe = 'LY' AND can_societe = 'LY')
                              AND amv_date_mvt >= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -2))) + 1
                              AND amv_date_mvt < LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -1))) + 1
                              AND amv_transac IN (5)
                              AND a.can_centre=amv_analytique
                              AND art.ART_ARTICLE = amv_article
                              AND inter.INT_INTERVENANT = amv_intervenant
                              AND inter.INT_SOCIETE='LY'
                              AND rub.RUB_RUBRIQUE = amv_rubrique
                              AND rub.RUB_SOCIETE ='LY'
    voila c'est ok j'ai réussit par contre comment faire un ===> Order By

  4. #4
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Il faut utiliser une vue implicite :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT col1||';'||col2...
    FROM (SELECT champ1 AS col1, champ2 AS col2...
          FROM table1
          WHERE ...
          UNION ALL
          SELECT champ21 AS col1, champ22 AS col2...
          FROM table2
          WHERE ...)
    OREDER BY col2, col1...

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    je n'arrive pas à trier par date

  6. #6
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Il faut que tu sélectionnes le champ contenant la date tel quel dans ta première requête, puis que tu fasse un ORDER BY dessus tout simplement.
    Tu peux poster ta requête si ça ne fonctionne pas.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 41
    Par défaut
    Avec des champs concaténés en projection (||''||), seul ORDER BY 1 est accepté car il n'y a qu'un seul champ concaténé en projection.
    A la limite il est possible de trier sur une partie de la projection avec un ORDER BY SUBSTR(etc...);

  8. #8
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Citation Envoyé par akr54 Voir le message
    Avec des champs concaténés en projection (||''||), seul ORDER BY 1 est accepté car il n'y a qu'un seul champ concaténé en projection.
    Pas du tout! On peut faire un ORDER BY sur n'importe quel champ même s'il ne fait pas partie du SELECT; il faut simplement que ce champ soit connu à ce niveau de la requête:
    Code sql : 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
    SQL> select deptno||';'||dname||';'||loc
      2  from scott.dept
      3  order by deptno;
     
    DEPTNO||';'||DNAME||';'||LOC
    ---------------------------------------------------------------------
    10;ACCOUNTING;NEW YORK
    20;RESEARCH;DALLA
    30;SALES;CHICAGO
    40;OPERATIONS;BOSTON
     
    SQL> select deptno||';'||dname||';'||loc
      2  from scott.dept
      3  order by dname;
     
    DEPTNO||';'||DNAME||';'||LOC
    ---------------------------------------------------------------------
    10;ACCOUNTING;NEW YORK
    40;OPERATIONS;BOSTON
    20;RESEARCH;DALLA
    30;SALES;CHICAGO

  9. #9
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    J'ai réussit à trier mes données cepdendant dans mon trie j'ai deux champs en résultat qui se suivent sans séparation ; pour que mon csv soit parfait il faut que j'arrive a séparer ces deux colonnes

    voici la requete :

    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
    SELECT 'Date de réception' date_recept, 'Société'||';'||'Article'||';'||'Désignation'||';'||'Magasin'||';'||'Centre analytique'||';'||'Désignation analytique'||';'||'Commande'||';'||'Compte'||';'||'Compte désignation'||';'||'Quantité'||';'||'Prix uintaire'||';'||'Prix total'||';'||'Nom'||';'||'Prénom'||';'||'Code fournisseur'||';'||'Fournisseur'
     
    FROM DUAL
    UNION ALL
     
    SELECT TO_CHAR (TRUNC(amv_date_mvt, 'dd')) date_recept, amv_societe||';'||amv_article||';'||art.ART_DESIGNATION||';'||amv_magasin||';'||amv_analytique||';'||a.can_designation||';'||amv_commande||';'||amv_cpte_cg||';'||com_designation||';'||amv_quantite||';'||amv_prix||';'||TRUNC (amv_quantite*amv_prix,2)||';'||int_nom||';'||int_prenom||';'||fou_fournisseur||';'||fou_nom
    	   FROM ARTICLES_MVTS,
    	   C_ANALYTIQUES a,
    	   ARTICLES art,
    	   INTERVENANTS b,
    	   COMPTES c,
    	   BRS_ENTETES d,
    	   fournisseurs e
    	   		WHERE (amv_societe = 'LY'
    			AND can_societe = 'LY'
    			AND com_societe = 'LY'
    			AND art_societe = 'LY'
    			AND int_societe = 'LY')
     
    			      AND amv_date_mvt >= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -2))) + 1
    				  AND amv_date_mvt < LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -1))) + 1
    				  AND amv_transac IN (3)
    				  AND art.ART_ARTICLE = amv_article
    				  AND b.INT_intervenant = amv_intervenant
    				  AND a.can_centre=amv_analytique
    				  AND c.com_compte = amv_cpte_cg
    				  AND d.bre_br = amv_br
    				  AND e.fou_fournisseur = bre_fournisseur
    				  AND e.fou_societe = bre_societe
    				  ORDER BY date_recept



    merci en tt cas pour vos précieux conseilles

  10. #10
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Comme je te l'ai dit, il faut utiliser une vue implicite :
    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
    SELECT date_recept||';'||texte
    FROM (
      SELECT 1 type_ligne,
             'Date de réception' date_recept,
             'Société'||';'||'Article'||';'||'Désignation'||';'||'Magasin'||';'||'Centre analytique'||';'||'Désignation analytique'||';'||'Commande'||';'||'Compte'||';'||'Compte désignation'||';'||'Quantité'||';'||'Prix uintaire'||';'||'Prix total'||';'||'Nom'||';'||'Prénom'||';'||'Code fournisseur'||';'||'Fournisseur' texte
      FROM DUAL
      UNION ALL
      SELECT 2 type_ligne,
             TO_CHAR (TRUNC(amv_date_mvt, 'dd')) date_recept,
             amv_societe||';'||amv_article||';'||art.ART_DESIGNATION||';'||amv_magasin||';'||amv_analytique||';'||a.can_designation||';'||amv_commande||';'||amv_cpte_cg||';'||com_designation||';'||amv_quantite||';'||amv_prix||';'||TRUNC(amv_quantite*amv_prix,2)||';'||int_nom||';'||int_prenom||';'||fou_fournisseur||';'||fou_nom texte
    	   FROM ARTICLES_MVTS,
    	   C_ANALYTIQUES a,
    	   ARTICLES art,
    	   INTERVENANTS b,
    	   COMPTES c,
    	   BRS_ENTETES d,
    	   fournisseurs e
    	   		WHERE (amv_societe = 'LY'
    			AND can_societe = 'LY'
    			AND com_societe = 'LY'
    			AND art_societe = 'LY'
    			AND int_societe = 'LY')
    			      AND amv_date_mvt >= LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -2))) + 1
    				  AND amv_date_mvt < LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE, -1))) + 1
    				  AND amv_transac IN (3)
    				  AND art.ART_ARTICLE = amv_article
    				  AND b.INT_intervenant = amv_intervenant
    				  AND a.can_centre=amv_analytique
    				  AND c.com_compte = amv_cpte_cg
    				  AND d.bre_br = amv_br
    				  AND e.fou_fournisseur = bre_fournisseur
    				  AND e.fou_societe = bre_societe
    ) v
    ORDER BY type_ligne, date_recept

  11. #11
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 35
    Par défaut
    bon c'est ok j'ai fais un order by 1 et enlevé le champs date recept qui me plombais mon order by et mon alias.

    Merci a tous pour votre aide

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 41
    Par défaut
    Citation Envoyé par xdescamp Voir le message
    Pas du tout! On peut faire un ORDER BY sur n'importe quel champ même s'il ne fait pas partie du SELECT;
    Désolé si j'ai dit une ânerie ! En tous les cas j'apprends car je n'y ai jusqu'à présent jamais réussi !!
    Perso je fais souvent des extractions vers le format EXCEL et j'utilise un séparateur de tabulation ||' '|| entre les quotes pour séparer les colonnes.
    Très franchement ton exemple simple m'interpelle mais je vais voir ça de suite !
    Puis-je me permettre par la suite de polluer ce post par mon propre exemple si je n'y parviens toujours pas ?
    Par avance merci !
    A très bientôt....

  13. #13
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Citation Envoyé par akr54 Voir le message
    Puis-je me permettre par la suite de polluer ce post par mon propre exemple si je n'y parviens toujours pas ?
    Par avance merci !
    A très bientôt....
    Pas de soucis pour moi. C'est ce qui rend ces forums intéressants!

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

Discussions similaires

  1. [SQL2005]Formations SQL Server 2005
    Par aemag dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/02/2007, 17h48
  2. [CSV] formater un fichier csv?
    Par fmh1982 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2006, 12h47
  3. Date conversion format sql
    Par nikoo_27 dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2006, 12h31
  4. [Date] Date courante au format SQL
    Par Mister Nono dans le forum JDBC
    Réponses: 3
    Dernier message: 17/03/2005, 16h57
  5. Récupérer une base postgresql au format .SQL ?
    Par hesky dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 26/08/2004, 10h14

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