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

Développement SQL Server Discussion :

Pivoter des lignes en colonnes + concatenation de 2 champs


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 36
    Par défaut Pivoter des lignes en colonnes + concatenation de 2 champs
    Bonsoir à tous,

    Je débute sur SQL et mes connaissances sont relativement limités sur ce domaine. J'aurai souhaité avoir votre avis sur ce que je souhaite réaliser.

    J'ai une vue SQL qui me remonte par un Numéro de QC, les contrôles d'analyse et les résultats de ces contrôles ainsi que les commentaires. Sachant que j'ai 57 type de contrôles autant dire que pour 1 QC je peux avoir 57 lignes. Je souhaite transposer ces lignes en colonnes et concaténer les commentaires aux résultats par type de contrôle.

    La table d'origine est comme ceci
    Nom : Capture1.JPG
Affichages : 1620
Taille : 52,1 Ko

    Sans parler des commentaires pour le moment, j'ai fait une requête de ce type
    Nom : Capture2.JPG
Affichages : 1559
Taille : 61,1 Ko

    Cela fonctionne, mais pour un seul QC Number, comment puis je l'adapter de sorte à avoir tous les QC number (1 ligne par QC)?

    Après comment puis je concaténer les commentaires aux résultats séparé par une virgule? Sur une autre de mes requêtes, j'avais utilisé une requête du type, qui fonctionne parfaitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select distinct ST2.VCRNUM_0 NUM_CONTRAT,
    	SUBSTRING(
    		(
    				Select ', '+ST1.CRY_0 AS [text()]
    				From dbo.VYPAYSORI ST1
    				Where ST1.VCRNUM_0 = ST2.VCRNUM_0
    				Order by ST1.VCRNUM_0
    				For XML PATH ('')
    		), 2, 1000) [PAYS]
    From dbo.VYPAYSORI ST2
    Merci d'avance pour vos avis, aide.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pour pivoter les lignes en colonnes, et bien... utilisez la clause PIVOT !
    La concaténation se fait avec l'opérateur +.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 36
    Par défaut
    Bonjour,

    Merci pour votre retour, j'ai regardé votre lien, ainsi que d'autres, mais comment puis je utiliser cette fonction sans agrégation? D'après ce je vois, on ne peut utiliser cette fonction qu'avec un agrégat (COUNT, SSUM, AVG, MIN, MAX)

    J'ai donc approfondi ma requête d'origine qui fonctionne maintenant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select QC_NUMBER=AN.QC_NUMBER,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'ACRYLAMIDE') AS ACRYLAMIDE,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'ACRYLAMIDE-FRNS') AS ACRYLAMIDE_FRNS,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'ADN') AS ADN,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'ADN-FRNS') AS ADN_FRNS,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'AFLA') AS AFLA,
    (select RESULTAT From dbo.VANALYZ Where QC_NUMBER =AN.QC_NUMBER AND CONTROLE = 'AFLA-FRNS') AS AFLA_FRNS
    From dbo.VANALYZ AN
    Group By QC_NUMBER
    Qu'en pensez vous?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par leboss38 Voir le message
    comment puis je utiliser cette fonction sans agrégation? D'après ce je vois, on ne peut utiliser cette fonction qu'avec un agrégat (COUNT, SSUM, AVG, MIN, MAX)
    S'il n'y a qu'une seule ligne, la somme, la moyenne, le minimum ou le maximum donneront le même résultat : l'unique valeur présente.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 622
    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 622
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    une autre approche :

    Mon jeu de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with tab1 (C1, C2) as
        (select 10, 'ACRYLAMIDE     '   union all
         select 12, 'ACRYLAMIDE-FRNS'   union all
         select 12, 'AFLA           '   union all
         select 15, 'TOTO           '   union all
         select 15, 'ADN            '   union all
         select 15, 'ADN            '   union all
         select 15, 'ADN-FRNS       '   union all
         select 18, 'AFLA           '   union all
         select 18, 'ACRYLAMIDE     '   union all
         select 18, 'AFLA-FRNS      '
        )
    La requête :
    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
    select c1
         , max(aa) as V1
         , max(bb) as V2
         , max(cc) as V3
         , max(dd) as V4
         , max(ee) as V5
         , max(ff) as V6 
    from (
    select C1
         , case when C2='ACRYLAMIDE     ' then C2 end as AA
         , case when C2='ACRYLAMIDE-FRNS' then C2 end as BB
         , case when C2='AFLA           ' then C2 end as CC
         , case when C2='AFLA-FRNS      ' then C2 end as DD
         , case when C2='ADN            ' then C2 end as EE
         , case when C2='ADN-FRNS       ' then C2 end as FF         
    from tab1       
        ) tab2
    group by c1 
    order by c1
    Le résultat :
    Pièce jointe 534971

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/11/2019, 13h30
  2. basculer des lignes en colonnes
    Par A5P1R1N3 dans le forum Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h17
  3. Boucle sur des lignes et colonnes
    Par Livet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2007, 19h45
  4. pivoter des lignes vers une colonne
    Par ashtur dans le forum Oracle
    Réponses: 1
    Dernier message: 02/05/2007, 13h59
  5. [T-SQL] Convertir des lignes en colonne
    Par cortex93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/12/2005, 16h17

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