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 :

SQL Serveur: requête tableau croisé


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut SQL Serveur: requête tableau croisé
    Bonjour, je cherche à faire un tableau croisé à l'aide d'une sélection. Je vous livre mon code:
    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  
    Calculated_Site as Site,
    Calculated_Salle as Salle,
     
    -- Recherche du nom du TDHQ
    SUBSTRING(intouch_comment,charindex ('-T',intouch_comment)+1,charindex (' - ',intouch_comment) - charindex ('-T',intouch_comment)) as TDHQ,
    -- Recherche de l'intensité par phase ou de la puissance TDHQ
    replace(right(intouch_comment,2),'le','P') as Paramètre,
     
    round(value,2) as Valeur
     
    FROM geteb.dbo.t_ConfigInTouch,runtime.dbo.v_AnalogHistory
    where
     t_ConfigInTouch.InTouch_TagName=v_AnalogHistory.TagName
    AND Calculated_Site='MSO'
    AND TagName like '%TD[HM][QT]%'
    AND (InTouch_Comment not like '%tané IN%' and InTouch_Comment not like '%TOR%' and InTouch_Comment not like '%réact%'and InTouch_Comment not like '%appar%')
    AND (InTouch_EngUnits like '%A%' or InTouch_EngUnits like '%kW%')
    AND wwResolution='3600000'
    AND wwRetrievalMode ='average'
    AND wwVersion ='original'
    AND DATETIME >DATEADD(HH,-1,GETDATE()) -- permet de recupérer la date et l'heure d'aujourdui -1 heure
    AND Datetime <= GetDate() -- Date et heure d'aujourd'hui
    order by Salle
    et voici le résultat de la requête:Nom : Snap2.jpg
Affichages : 1047
Taille : 37,8 KoNom : Snap2.jpg
Affichages : 1047
Taille : 37,8 Ko soit une première colonne avec un nom de site, la seconde avec un nom de salle, la troisième avec un nom d'équipement, la quatrième avec le paramètre de l'équipement, et le dernier avec sa valeur numérique. Je cherche à faire une analyse croisé avec en tête de ligne le nom de l'équipement , en tête de colonne le nom du paramètre (soit donc, I1, I2, I3 et P) et en données la valeur. Qui aurait une solution à me proposer? Merci à tous pour votre collaboration.

  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 814
    Points
    30 814
    Par défaut
    Le mot clé est PIVOT
    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
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut Merci pour la réponse
    Désolé mais je craint que que mon Microsoft SQL serveur 2012 sur lequel je travaille ne dispose pas de cette instruction, à moins que je ne sache peut-être pas m'y prendre. Vous pouvez me proposer un début de code , ou il existe peut-être un tuto? Merci de votre gentillesse!!!

  4. #4
    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 814
    Points
    30 814
    Par défaut
    As-tu bien cherché dans la documentation ?
    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
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut Oui , mais peut être pas suffisement...
    J'ai regardé dans les tuto SQL, mais je n'ai pas trouvé quelque chose d'had-oc. Pour ce qui est de mon serveur, cata... l'aide n'y a pas été installée !!!!

  6. #6
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Pivot existe bien en 2012 . Je te conseil de regarder sur msdn ... Si malgré cette source d'info tu as encors des questions ou des soucis n'hésite pas a poster ton code .
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut Merci pour cette réponse
    J'ai effectivement trouvé qque chose. J'espère y arriver. Je ne manquerai pas de revenir si l'aide trouvée n'était pas suffisante. Cdt

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut Recherche sans succès
    Désolé mais je repose le problème, malgrès mes recherches je n'arrive pas à trouver la bonne solution. Quelqu'un pourrait m'aider svp. Merci

  9. #9
    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
    bonjour,

    cela devrait donner quelque chose comme ça pour le pivot

    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
    22
    23
    24
    25
    26
    27
     
    WITH Tableau_Croise AS (
     
    SELECT Calculated_Site  AS Site
         , Calculated_Salle AS Salle
           -- Recherche du nom du TDHQ
         , SUBSTRING(intouch_comment,charindex ('-T',intouch_comment)+1,charindex (' - ',intouch_comment) - charindex ('-T',intouch_comment)) as TDHQ
           -- Recherche de l'intensité par phase ou de la puissance TDHQ
         , replace(right(intouch_comment,2),'le','P') as Parametre
         , round(value,2) as Valeur 
      FROM geteb.dbo.t_ConfigInTouch
           INNER JOIN runtime.dbo.v_AnalogHistory ON t_ConfigInTouch.InTouch_TagName=v_AnalogHistory.TagName
     WHERE Calculated_Site='MSO'
       AND TagName like '%TD[HM][QT]%'
       AND (InTouch_Comment not like '%tané IN%' and InTouch_Comment not like '%TOR%' and InTouch_Comment not like '%réact%'and InTouch_Comment not like '%appar%')
       AND (InTouch_EngUnits like '%A%' or InTouch_EngUnits like '%kW%')
       AND wwResolution='3600000'
       AND wwRetrievalMode ='average'
       AND wwVersion ='original'
       AND DATETIME >DATEADD(HH,-1,GETDATE()) -- permet de recupérer la date et l'heure d'aujourdui -1 heure
       AND Datetime <= GetDate() -- Date et heure d'aujourd'hui
    )
     
    SELECT *
      FROM Tableau_Croise
      PIVOT ( MAX( Valeur )
       FOR Parametre IN ( [I1], [I2], [I3], [P] ) AS PVT;

    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

  10. #10
    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
    Vous semblez avoir un sérieux problème de modélisation, c'est ce qui rend vos requêtes si compliquées à écrire.
    Elles vont certainement être tout aussi compliquées à exécuter d'ailleurs, j'espère que vous ne visez pas la performance !

    C'est par exemple le fait que votre colonne paramètre découle en fait de l'extraction d'un sous partie d'une colonne (intouch_comment) qui rend votre pivot plus difficile à mettre en œuvre

    Mettez votre requete dans une CTE pour faire votre pivot, quelque chose comme :
    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
     
    WITH CTE AS (
     
    SELECT  
    Calculated_Site as Site,
    Calculated_Salle as Salle,
     
    -- Recherche du nom du TDHQ
    SUBSTRING(intouch_comment,charindex ('-T',intouch_comment)+1,charindex (' - ',intouch_comment) - charindex ('-T',intouch_comment)) as TDHQ,
    -- Recherche de l'intensité par phase ou de la puissance TDHQ
    replace(right(intouch_comment,2),'le','P') as Parametre,
     
    round(value,2) as Valeur
     
    FROM geteb.dbo.t_ConfigInTouch,runtime.dbo.v_AnalogHistory
    where
     t_ConfigInTouch.InTouch_TagName=v_AnalogHistory.TagName
    AND Calculated_Site='MSO'
    AND TagName like '%TD[HM][QT]%'
    AND (InTouch_Comment not like '%tané IN%' and InTouch_Comment not like '%TOR%' and InTouch_Comment not like '%réact%'and InTouch_Comment not like '%appar%')
    AND (InTouch_EngUnits like '%A%' or InTouch_EngUnits like '%kW%')
    AND wwResolution='3600000'
    AND wwRetrievalMode ='average'
    AND wwVersion ='original'
    AND DATETIME >DATEADD(HH,-1,GETDATE()) -- permet de recupérer la date et l'heure d'aujourdui -1 heure
    AND Datetime <= GetDate() -- Date et heure d'aujourd'hui
    )
    SELECT Site, Salle, I1, I2, P
    FROM CTE PIVOT (
    	MAX(Valeur) 
    	FOR Parametre
    		IN( [I1], [I2], [P]	)
    	)AS T
    order by Salle

  11. #11
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 65
    Points
    65
    Par défaut Merci pour ces réponses
    Lyche et aieeeuuuu, merci à vous, ça m'a permis d'aboutir. Votre soluce est la bonne . Merci encore !!!

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

Discussions similaires

  1. Requête tableau croisé
    Par izeba dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/07/2011, 19h43
  2. Requête -> tableau croisé et autres besoins statistiques
    Par Perplexe dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/02/2010, 15h38
  3. Récupérer la requéte sql d'un tableau croisé en vba
    Par snipeurcoq dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2008, 14h14
  4. Requête tableau croisé
    Par mulanzia2003 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 12/10/2007, 11h15
  5. Requête tableau croisé dynamique + état
    Par willytito dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2006, 15h23

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