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

Requêtes et SQL. Discussion :

Renommer une colonne d'une requête avec la valeur d'un champ


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Renommer une colonne d'une requête avec la valeur d'un champ
    Bonjour,

    J'ai une table :

    realisation
    --------------
    num_realisation
    type_realisation
    valeur_realisee


    Ma requête est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT R1.valeur_realisee as [XXXX], R2.valeur_realisee as [YYYY] 
    FROM realisation as R1, realisation as R2 
    WHERE ((R1.type_realisation = 'consommation' and R2.type_realisation = 'température') OR (R1.type_realisation = 'température' and R2.type_realisation ='consommation')) 
    AND R1.num_realisation > R2.num_realisation ;
    Je souhaite que XXXX prenne la valeur de R1.type_realisation ('température' ou 'consommation' selon la condition R1.num_realisation > R2.num_realisation) et YYYY prenne la valeur de R2.type_realisation.

    Savez vous si c'est possible?

    J'ai déjà essayé en remplaçant XXXX par
    R1.type_realisation
    ou par
    (select R.type_realisation from realisation R where R.num_realisation = R1.num_realisation)
    ou par
    IIF(R1.type_realisation='température','température','consommation')
    mais ni l'un ni l'autre ne fonctionne...

    Merci d'avance pour votre aide !

  2. #2
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    ben ça a l'ai bizarre ce que tu veux faire.

    Comment feras-tu si ta requête sors plusieurs type de réalisation??
    tu auras plusieurs noms de colonnes, et ça SQL il connaît pas.

    Dans ce cas c'est de la mise en page que tu veux faire?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Oui en gros c'est de la mise en page ! Je veux juste que le nom de la colonne soit le type de réalisation correspondant

  4. #4
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    Pour de la mise en page, les états sont tout indiqués, avec des options toutes faites, pour des fichier à imprimer.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Bon en fait c'est pas vraiment ce genre de mise en page :

    je vais avoir un formulaire dans lequel je rentrerai "température" et "consommation" (ou d'autres trucs)
    ensuite, j'exporterai la requete SQL en EXCEL, donc j'ai besoin d'avoir les bons noms pour les colonnes, d'où les bons alias

  6. #6
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    Ah, donc il s'agit d'un export.

    ok. j'ai fait quelque chose du même style.
    1) créer une requête paramétrée
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS PARAM_DATE DateTime;
    SELECT Insee.NomCommune, Abonné.NomAbonné, Abonné.DateRDV 
    FROM Insee INNER JOIN Abonné ON Insee.N°Commune = Abonné.N°Commune
    WHERE (((Abonné.DateRDV)>=[PARAM_DATE]);
    2) créer une fonction pour exporter en fonction de ce qui sera entré en paramètre, par exemple, se baser sur une liste déroulante:
    Code vb : 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
     
    Sub RapportLudo()
    'Déclaration des variables
        Dim xlApp
        Dim xlSheet
        Dim xlBook
        Dim db As database
        Dim qry1 As QueryDef
        Dim i As Long, j As Long
        Dim t0 As Long, t1 As Long
        Dim rec1 As DAO.Recordset
     
    'Implémentation des variables
        t0 = Timer
        Set db = Application.CurrentDb
        Set qry1 = db.QueryDefs("RequêteParamétrée")
        qry1.Parameters("PARAM_DATE").Value = Forms!Rapport!Modifiable27
        Set rec1 = qry1.OpenRecordset
     
        'Initialisation d'Excel
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Add
     
        'Ajouter une feuille de calcul
        Set xlSheet = xlBook.Worksheets.Add
        xlSheet.Name = Replace(Date, "/", "-")
     
        xlApp.Visible = True
     
        ' les entetes
        '  .Fields(Index).Name renvoie le nom du champ
        For j = 0 To rec1.Fields.Count - 1
            xlSheet.Cells(1, j + 1) = rec1.Fields(j).Name
            ' Nous appliquons des enrichissements de format aux cellules
            With xlSheet.Cells(1, j + 1)
                .Interior.ColorIndex = 15
                .Interior.Pattern = xlSolid
            End With
        Next j
     
        ' recopie des données à partir de la ligne 2
        i = 2
        Do While Not rec1.EOF
            For j = 0 To rec1.Fields.Count - 1
                ' .Fields(Index).Type renvoie le type du champ
                '   si c'est un Texte (dbText) nous insérons "'" pour
                '   qu'il soit reconnu par Excel comme du Texte
                If rec1.Fields(j).Type = dbText Then
                    xlSheet.Cells(i, j + 1) = "'" & rec1.Fields(j)
                Else
                    xlSheet.Cells(i, j + 1) = rec1.Fields(j)
                End If
                With xlSheet.Cells(i, j + 1)
                    .Borders(xlEdgeBottom).Weight = xlThin
                    .Borders(xlEdgeLeft).Weight = xlThin
                End With
            Next j
            i = i + 1
            rec1.MoveNext
        Loop
     
        ' code de fermeture et libération des objets
        xlBook.SaveAs "\\RaccordementsAbonnés\RapportAbonnésDu" & Replace(Date, "/", "-") & ".xlsx"
        xlApp.Visible = True
        rec1.Close
        Set rec1 = Nothing
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
        t1 = Timer
        Debug.Print i & " enregistrements", Format(t1 - t0, "0") & " secondes"
    End Sub

    avec ça je pense que tu as de bonnes bases pour bidouiller ce à quoi tu veux arriver.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ton aide...!
    Malheuresement ça ne va pas marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            xlSheet.Cells(1, j + 1) = rec1.Fields(j).Name
    Justement le nom que je veux n'est pas le Fields.Name...

    Le problème c'est que je ne sélectionne pas le champ type_realisation dans la requête donc je ne peux pas remplir les cases de la 1ere ligne...
    Je pourrais le sélectionner et le remplacer mais je pense pas que ce soit une bonne solution...

    Je pensais qu'il était possible d'évaluer la valeur du champs dans la première ligne du select mais apparement non

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Si quelqu'un a une autre idée je suis preneuse!

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Finalement j'ai utilisé ton code et il m'a vraiment beaucoup aidé !!!
    Merci !

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Ajouter une colonne dans une table via une requête
    Par Alien_psy dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 23/02/2013, 05h24
  3. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  4. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  5. Réponses: 6
    Dernier message: 19/03/2009, 10h22

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