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

MS SQL Server Discussion :

Problème sur une procédure pivot + création de table [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de libremax
    Profil pro
    Chargé de projets
    Inscrit en
    Mars 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de projets

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Points : 91
    Points
    91
    Par défaut Problème sur une procédure pivot + création de table
    Bonjour,

    J'aurais besoin d'un peu d'aide car j'ai un petit soucis sur une procédure.
    je créer une procédure qui fait un pivot sur une view et je voudrais transférer le résultat dans une table que je crée en dynamique.
    ma procédure bug au niveau du select qui injecte dans la table crée.
    l'erreur doit être bête mais je bloque.

    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
     
    USE [GMAO]
    GO
    /****** Object:  StoredProcedure [dbo].[Eta_Amdec]    Script Date: 10/13/2014 22:30:32 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    DECLARE @cols AS NVARCHAR(MAX);
    DECLARE @cols1 AS NVARCHAR(MAX);
    DECLARE @query AS NVARCHAR(MAX);
     
    select @cols = STUFF((SELECT distinct ',' +
                            QUOTENAME(Type_Intervention )
                          FROM View_Analyse_taux_20
                          FOR XML PATH(''), TYPE
                         ).value('.', 'NVARCHAR(MAX)') 
                            , 1, 1, '');
    select @cols1 = STUFF((SELECT distinct ',' +
                            QUOTENAME(Type_Intervention )+'NVARCHAR(max)'
                          FROM View_Analyse_taux_20
                          FOR XML PATH(''), TYPE
                         ).value('.', 'NVARCHAR(MAX)') 
                            , 1, 1, ' ');
    DECLARE @SQLTable NVARCHAR(Max) = 'CREATE TABLE [Pivot]( Date datetime ,' + 
    @cols1+ ' )'; 
     
    IF OBJECT_ID('Pivot') IS NOT NULL 
    	DROP TABLE [Pivot]; 
    execute(@SQLTable); 
     
     
    SELECT @query = 'INSERT INTO [GMAO].[dbo].[Pivot]( Date ,' + 
    @cols+ ' ) values (
    SELECT * FROM dbo. View_Analyse_taux_20
    pivot
    ( Max(NB_Intervention) FOR Type_Intervention IN(' + @cols + ')) AS p'
     
      print @query;
     
    execute(@query);
    go
    Si quelqu'un peux m'aider j'en serais ravis.
    Merci d'avance.
    Débutant un jour, débutant toujours car chaques jours qui passent nous en apprend un peu plus.

  2. #2
    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,

    Il y a beaucoup d'erreur...

    Commencez par écrire vos requêtes à la main, et les faire fonctionner.
    Ensuite, passez en dynamique.

    Quelques erreurs qui sautent aux yeux :

    1/ vous utiliser insert into values select ...il faut choisir, soit vous insérez des valeurs en dur, et vous utilisez VALUES, soit voue faites une requete (ce qui semble être votre cas) et alors il faut mettre directement le SELECT.

    2/ vous faites une SELECT *. En faisant ainsi, certaines colonnes de la table arguments seront prise en compte en plus de la colonne date et de la colonne pivotée. D'ailleurs, que mettez vous dans la colonne date ? Peut-on voir la structure de la table argument ?


    D'un point de vue général... pourquoi faites-vous cela ? pouvez vous nous indiquer un peu le contexte ?

  3. #3
    Membre régulier Avatar de libremax
    Profil pro
    Chargé de projets
    Inscrit en
    Mars 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de projets

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Points : 91
    Points
    91
    Par défaut re
    Tous d'abord merci de vous intéresser à mon problème.

    En ce qui concerne le contexte, je travail sur une gestion de maintenance et là je fait des documents d'analyses multiples.
    Pour ce faire je retravaille différentes données via des views différentes qui a la fin sont sous formes :
    dates/désignation/info.
    la colonne info est différente suivant les views cela peux être des heures d'ouverture de ligne, des temps arrêts, des € dépensé, des taches ...
    j'ai crée une view globale avec des union.
    fonction de ces données je veux faire un pivot afin d'avoir :
    col désignation1 | col désignation2 | etc
    Date| info1 | info2 | ....
    le pivot fonctionne bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM dbo. View_Analyse_taux_20
    pivot
    ( Max(NB_Intervention) FOR Type_Intervention IN(' + @cols + ')) AS p'
    Mais je dois retravailler les résultats obtenus (via des fonctions spécifiques : calcul de taux de reprise,...) d'où le besoin de recréer une table dynamiquement avec les lignes et colonnes qui me servira ensuite pour le reste des calculs.

    Ma solution n'est peux être pas la plus logique mais c'est le plus facile que j'ai trouver.

    je suis ouvert à toutes propositions ou solutions

    Merci d'avance
    Débutant un jour, débutant toujours car chaques jours qui passent nous en apprend un peu plus.

  4. #4
    Membre régulier Avatar de libremax
    Profil pro
    Chargé de projets
    Inscrit en
    Mars 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de projets

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Points : 91
    Points
    91
    Par défaut re
    Merci pour la solution effectivement je n'avais pas vue que j'ai mis un values de trop

    Merci pour votre aide.
    Salutation
    Débutant un jour, débutant toujours car chaques jours qui passent nous en apprend un peu plus.

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

Discussions similaires

  1. Problème sur une procédure
    Par Tonii dans le forum PL/SQL
    Réponses: 3
    Dernier message: 28/02/2012, 16h42
  2. Problème sur une requête de mise à jour entre 2 tables
    Par Throbb dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/03/2009, 14h43
  3. Problème sur une procédure stockée
    Par jolio2006 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 17/11/2008, 18h55
  4. Problème sur une création de table !
    Par pierre24 dans le forum SAS Base
    Réponses: 3
    Dernier message: 21/05/2008, 13h58
  5. problème sur une procédure
    Par Coolbeats dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 31/12/2007, 17h17

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