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

Langage SQL Discussion :

CONCATENATION de 3 colonnes


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 29
    Par défaut CONCATENATION de 3 colonnes
    Bonjour à tous,

    J'ai la requête suivante qui 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
    SELECT
     
    C_CMD.DATE_CMD as Date_Cde,
    CLIENT.NOM as Client,
    C_CMD.ID_ANNEE as Année,
    TRIM(C_CMD.ID_C_CMD) as Cde,
    C_CMD_LG.N_LIGNE as Ligne,
    C_CMD.N_CMD_CLI as Cde_Client_1,
    C_CMD_LG.N_DOSSIER as Cde_Client_2,
    ARTICLE.REF as Ref,
    C_CMD_LG.PRIX_UNIT as PU,
    MONNAIE.ABREV as Devise
     
    FROM C_CMD 
     
    inner join C_CMD_LG on C_CMD.CD_C_CMD=C_CMD_LG.CD_C_CMD
    inner join ARTICLE on ARTICLE.CD_ARTICLE=C_CMD_LG.CD_ARTICLE
    inner join CLIENT on CLIENT.CD_CLIENT=C_CMD.CD_CLIENT
    full join MONNAIE on MONNAIE.CD_MONNAIE = C_CMD.CD_MONNAIE
     
    Where C_CMD_LG.QTE_CMDEE<>0
    AND ((C_CMD.N_CMD_CLI IS NOT NULL OR C_CMD.N_CMD_CLI NOT LIKE 'R%') AND (C_CMD_LG.N_DOSSIER IS NULL OR C_CMD_LG.N_DOSSIER NOT LIKE 'R%'))
     
    ORDER BY C_CMD_LG.CD_C_CMD asc
    Je souhaite concaténer les valeurs des colonnes C_CMD.ID_ANNEE & TRIM(C_CMD.ID_C_CMD) & C_CMD_LG.N_LIGNE pour obtenir une numéro unique et l'afficher dans une 4ème colonne.

    Screenshot de ce que ça donnerait si cela fonctionnait :

    Nom : Capture.JPG
Affichages : 245
Taille : 60,3 Ko

    J'ai testé plusieurs choses, je ne parviens pas à avoir une requête sans bug, sauriez-vous éclairer ma lanterne ?

    Cordialement,

    Charles CARON

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 613
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    utilisez CONCAT après avoir converti les colonnes numériques ou date en char.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 29
    Par défaut
    Bonjour,

    Quelle est la fonction pour convertir toutes mes colonnes en chaine de caractère ?

    Le code suivant est-il bon ?

    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
     
    SELECT
     
    C_CMD.DATE_CMD as Date_Cde,
    CLIENT.NOM as Client,
    TO_CHAR(C_CMD.ID_ANNEE) as Année,
    TO_CHAR(TRIM(C_CMD.ID_C_CMD)) as Cde,
    TO_CHAR(C_CMD_LG.N_LIGNE) as Ligne,
    C_CMD.N_CMD_CLI as Cde_Client_1,
    C_CMD_LG.N_DOSSIER as Cde_Client_2,
    ARTICLE.REF as Ref,
    C_CMD_LG.PRIX_UNIT as PU,
    MONNAIE.ABREV as Devise
     
    FROM C_CMD 
     
    inner join C_CMD_LG on C_CMD.CD_C_CMD=C_CMD_LG.CD_C_CMD
    inner join ARTICLE on ARTICLE.CD_ARTICLE=C_CMD_LG.CD_ARTICLE
    inner join CLIENT on CLIENT.CD_CLIENT=C_CMD.CD_CLIENT
    full join MONNAIE on MONNAIE.CD_MONNAIE = C_CMD.CD_MONNAIE
     
    Where C_CMD_LG.QTE_CMDEE<>0
    AND ((C_CMD.N_CMD_CLI IS NOT NULL OR C_CMD.N_CMD_CLI NOT LIKE 'R%') AND (C_CMD_LG.N_DOSSIER IS NULL OR C_CMD_LG.N_DOSSIER NOT LIKE 'R%'))
     
    ORDER BY C_CMD_LG.CD_C_CMD asc
    Cordialement,

    Marin SIMONS

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2019
    Messages : 29
    Par défaut
    Bonjour,

    Il semble que j'ai réussi sans conversion en chaine de caractère via le code suivant :

    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
    SELECT
     
    CONCAT(CONCAT(C_CMD.ID_ANNEE,TRIM(C_CMD.ID_C_CMD)),C_CMD_LG.N_LIGNE) as Numéro_unique,
    C_CMD.ID_ANNEE as Année,
    TRIM(C_CMD.ID_C_CMD) as Cde,
    C_CMD_LG.N_LIGNE as Ligne,
    C_CMD.DATE_CMD as Date_Cde,
    CLIENT.NOM as Client,
    C_CMD.N_CMD_CLI as Cde_Client_1,
    C_CMD_LG.N_DOSSIER as Cde_Client_2,
    ARTICLE.REF as Ref,
    C_CMD_LG.PRIX_UNIT as PU,
    MONNAIE.ABREV as Devise
     
    FROM C_CMD 
     
    inner join C_CMD_LG on C_CMD.CD_C_CMD=C_CMD_LG.CD_C_CMD
    inner join ARTICLE on ARTICLE.CD_ARTICLE=C_CMD_LG.CD_ARTICLE
    inner join CLIENT on CLIENT.CD_CLIENT=C_CMD.CD_CLIENT
    full join MONNAIE on MONNAIE.CD_MONNAIE = C_CMD.CD_MONNAIE
     
    Where C_CMD_LG.QTE_CMDEE<>0
    AND ((C_CMD.N_CMD_CLI IS NOT NULL OR C_CMD.N_CMD_CLI NOT LIKE 'R%') AND (C_CMD_LG.N_DOSSIER IS NULL OR C_CMD_LG.N_DOSSIER NOT LIKE 'R%'))
     
    ORDER BY C_CMD_LG.CD_C_CMD asc
    Merci,

    Charles CARON

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 613
    Billets dans le blog
    10
    Par défaut
    si on ne convertit pas en caractères, l'alignement du résultat sera hasardeux

    Exemple de jeu d'essais :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table T1(T1id   integer ,
                    T1dc   dec(5,2),
                    T1dt   date
                    )
    ;
    insert into T1
    values (0001, 123.45, '2021-04-15')
         , (0100, 010.10, '2021-04-22')
         , (0200, 005.00, '2021-04-27')
    ;

    Sans transtypage
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select concat(T1id, T1dc, T1dt) as truc
    from T1
    ;
    on obtient
    truc
    1123.452021-04-15
    10010.102021-04-22
    2005.002021-04-27

    après transtypage et alignement sur la longueur maxi (ici en SQL server)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select concat( concat(replicate('0', 4-len(cast(T1id as char(4)))), T1id)
                 , T1dt
                 , concat(replicate('0', 7-len(cast(T1dc as char(7)))), T1dc)
                 ) as truc
    from T1
    ;

    on obtient
    truc
    00012021-04-150123.45
    01002021-04-220010.10
    02002021-04-270005.00

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

Discussions similaires

  1. Concatenation sur une colonne ayant le même id
    Par MangoZaz dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/01/2016, 15h37
  2. Réponses: 9
    Dernier message: 27/01/2012, 14h10
  3. requete SQL pour concatener les valeurs d'une colonne
    Par moabomotal dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/08/2007, 11h59
  4. pb simple : concatenation de colonnes
    Par mike2302 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/06/2007, 10h33
  5. pb simple : concatenation de colonnes
    Par mike2302 dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/05/2007, 13h09

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