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 :

Erreur pendant l'utilisation de la fonction Pivot


Sujet :

Développement SQL Server

  1. #1
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut Erreur pendant l'utilisation de la fonction Pivot
    bonjour
    j'ai besoin d'aide pour réaliser une requête PIVOT sous sql server 2008 pour la première fois afin de modifier une expression table dans une autre table
    j'ai une table dédier pour le calcul des commun des jours du congés par années avec les colonnes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select top(10) count(id_c)as nbre,year(dt_cuf)as year , suf from RessHum_Conge
    group by suf,year(dt_cuf)
    order by count(id_c) desc
    nbre year suf
    2708 2014 AxR
    2398 2014 STB2
    2246 2014 STB1
    2196 2013 AxR
    2124 2013 STB2
    1755 2013 STB1
    1467 2014 logistiques Import / Export
    1438 2014 X161
    993 2013 X161
    969 2013 logistiques Import / Export

    j'ai besoin de le modifier pour avoir cette affichage

    SUF 2013 2014
    AxR 2196 2708
    STB1 1755 2246
    STB2 2124 2398
    X161 993 1438
    j'ai essayer avec cette requéte mais ca pas marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select suf ,[2013] ,[2014] from RessHum_Conge
    pivot (count(id_c) for dt_cuf in('[2013]','[2014]'))  as nbre 
    group by suf
    Merci beaucoup de votre aide et vos correction

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    j'ai essayer avec cette requéte mais ca pas marcher
    Bonjour abdallah,

    Tu pratiques ces forums depuis suffisamment longtemps pour savoir que "ça marche pas" n'est pas un message d'erreur ni une description du résultat erroné

    Pourquoi abandonnes le regroupement par year(dt_cuf) dans la seconde requête ?
    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.

  3. #3
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Retires juste les '' de tes années pivot.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select suf ,[2013] ,[2014]
      from RessHum_Conge
           pivot (count(id_c) for dt_cuf in([2013], 2014 ))  as nbre 
      group by suf;

    ça devrait fonctionner
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  4. #4
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    merci pour vos réponse

    j'ai eu ce message d'erreur pendant l’exécution


    Msg 488, Level 16, State 1, Line 1
    Les colonnes Pivot grouping doivent être comparables. Le type de la colonne 'motif' est 'text', qui n'est pas comparable.

  5. #5
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    merci pour vos réponse

    j'ai eu ce message d'erreur pendant l’exécution


    Msg 488, Level 16, State 1, Line 1
    Les colonnes Pivot grouping doivent être comparables. Le type de la colonne 'motif' est 'text', qui n'est pas comparable.
    Je ne vois pas motif dans ton pivot. Et si ta colonne est en texte, fait un MAX()

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Le type TEXT est déprécié depuis plus de dix ans... passez en VARCHAR(MAX)

  7. #7
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    le colonne suf il est déjà définit en varchar(max)
    Images attachées Images attachées  

  8. #8
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    le colonne suf il est déjà définit en varchar(max)
    possible d'avoir un DDL de table + quelques lignes afin de comprendre le problème, parce qu'on avance à l'aveugle et on ira nullpart.
    Même si c'est pas complet, au moins les colonnes utilisées lors du pivot, qu'on puisse reproduire de notre côté.

    PS : Pour les screenshot, l'outil de capture d'écran de w10 (présent depuis vista) est très utile pour éviter les captures trop grandes

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  9. #9
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Ci joint le DDL du table

    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
    CREATE TABLE [dbo].[RessHum_Conge](
    	[id_c] [bigint] IDENTITY(1,1) NOT NULL,
    	[matricule] [varchar](50) NOT NULL,
    	[nmpr] [varchar](200) NOT NULL,
    	[suf] [varchar](100) NOT NULL,
    	[ntr] [varchar](250) NULL,
    	[duj] [varchar](50) NOT NULL,
    	[auj] [varchar](50) NOT NULL,
    	[nbj] [int] NULL CONSTRAINT [DF_RessHum_Conge_nbj]  DEFAULT ((1)),
    	[lej] [varchar](50) NULL,
    	[poste] [varchar](250) NULL,
    	[motif] [text] NULL,
    	[dtsys] [datetime] NULL,
    	[etat_cuf] [varchar](50) NULL CONSTRAINT [DF_RessHum_Conge_etat_cuf]  DEFAULT ('En cours'),
    	[rq_cuf] [text] NULL,
    	[dt_cuf] [datetime] NULL,
    	[poste_cuf] [varchar](150) NULL,
    	[diplome] [varchar](50) NULL,
    	[etat_dir] [varchar](50) NULL CONSTRAINT [DF_RessHum_Conge_etat_dir]  DEFAULT ('--'),
    	[rq_dir] [text] NULL,
    	[dt_dir] [datetime] NULL,
    	[poste_dir] [varchar](150) NULL,
    	[etat_dop] [varchar](50) NULL CONSTRAINT [DF_RessHum_Conge_etat_dop]  DEFAULT ('--'),
    	[rq_dop] [text] NULL,
    	[dt_dop] [datetime] NULL,
    	[poste_dop] [varchar](150) NULL,
    	[usine] [varchar](8) NULL,
    	[etat_rh] [varchar](50) NULL CONSTRAINT [DF_RessHum_Conge_etat_rh]  DEFAULT ('--'),
    	[rq_rh] [text] NULL,
    	[dt_rh] [datetime] NULL,
    	[poste_rh] [varchar](150) NULL,
    	[exp] [varchar](20) NULL,
    	[ValidPar_cufs] [varchar](10) NULL,
    	[ValidPar_dir] [varchar](10) NULL,
    	[ValidPar_rh] [varchar](10) NULL,
    	[PassPar] [varchar](50) NULL,
     CONSTRAINT [PK_RessHum_Conge] PRIMARY KEY CLUSTERED 
    (
    	[id_c] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [FG1]
    ) ON [FG1] TEXTIMAGE_ON [PRIMARY]
     
    GO

  10. #10
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ;WITH Cte_Pvt AS (
    SELECT SUF, YEAR( DT_CUF ) AS Y_DT_CUF, ID_C
      FROM RessHum_Conge )
     
    SELECT *
      FROM Cte_Pvt rq
           PIVOT ( COUNT(ID_C) FOR Y_DT_CUF IN( [2013], [2014] ) )  AS nbre;

    Chez moi, cette requête fonctionne, mais je n'ai pas de données du coup je ne sais pas si c'est juste.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  11. #11
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    oui il est maintenant fonctionnelle

    merci bien pour votre support

  12. #12
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Avec plaisir

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Citation Envoyé par al1_24 le 09/05 Voir le message
    Pourquoi abandonnes le regroupement par year(dt_cuf) dans la seconde requête ?
    Sans commentaire
    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.

  14. #14
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    J'avoue ne pas avoir compris cette question quand tu l'as posé

    Mais oui, il n'est pas possible d'extraire une année d'une date pour s'en servir de colonne pivot sans avoir au préalable extrait l'année.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/08/2008, 10h09
  2. Réponses: 13
    Dernier message: 05/08/2008, 17h31
  3. Réponses: 3
    Dernier message: 28/05/2008, 00h07
  4. [PHPMailer] Erreur lors de l'utilisation de la fonction mail
    Par onlytime dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/04/2008, 17h11
  5. Erreur à l'utilisation de la fonction header
    Par paradeofphp dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2006, 15h50

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