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 :

faire une requete croisée avec sql


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut faire une requete croisée avec sql
    Salut,

    je ne sais pas si je suis au bon endroit pour poster ce sujet mais je travaille sur un projet pour la gestion des présence des agent d'une organisation et j'ai deux tables:tAgent(NumAgent,nom,prenom) et mvt_presence(NumAgent,datePresence,heure,confirmP) je voudrais avoir une requete qui m'affiche s'affiche comme suit (voir en l'attache):


    est ce possible?
    Fichiers attachés Fichiers attachés

  2. #2
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Oui, utilise une requête pivot
    http://fadace.developpez.com/mssql/pivot/

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut Probleme dans une requete pivot sous sql server 2000
    Salut,

    Après suffisamment lus l'article Requêtes pivots sous MS-SQL Server de Fabien Celaia, nous avons essaiyer de tester ce code sous sql server 2000

    declare c cursor for select distinct annee from ventes order by annee
    declare @sql varchar(2000), @col int
    set @sql=''
    open c
    fetch c into @col
    while @@FETCH_STATUS = 0
    begin
    select @sql=@sql+'SUM( case when annee='+ cast(@col as varchar(30)) +' then vente else 0 end) as ['+ cast(@col as varchar(30)) +'],'
    fetch c into @col
    end
    close c
    deallocate c

    exec ('SELECT Produit, '+ left(@sql,len(@sql)-1) +' from Ventes group by Produit' )
    est nous recevons ce message d'erreur:

    Serveur*: Msg 156, Niveau 15, État 1, Ligne 14
    Incorrect syntax near the keyword 'left'.
    quelqu'un peut nous dire ou ce trouverait le probleme?

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Oui, le Exec n'admet comme argument qu'une chaine de caractère.

    Donc faire la concaténation
    dans une variable et utiliser cette variable comme argument de la fonction Exec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    declare @sqlToExecute varchar(100)
    set @sqlToExecute ='SELECT Produit, '+left(@sql,len(@sql)-1)+' from Ventes group by Produit'
    exec(@sqlToExecute)
    

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut
    Merci bien Bluedeep, En effet comme vous allez le remarquer je suis juste en train d'apprendre le t-sql et j'ai essayer d'adapter ta recommandation mais je ce message d'erreur

    Serveur*: Msg 170, Niveau 15, État 1, Ligne 1
    Line 1: Incorrect syntax near '2004'.
    puis je également avoir des explications sur cette ligne de code

    declare s cursor for select distinct annee from ventes order by annee

  6. #6
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Il s'agit de la définition d'un curseur.

    Un curseur sert à pouvoir manipuler individuellement chaque ligne d'une requête. C'est un traitement plus ciblé mais beaucoup plus long qu'une requête purement ensembliste (SELECT, INSERT, UPDATE)

    Le conseil générique : on peut quasiment toujours se débrouiller pour éviter d'utiliser un curseur.

    Cf: http://baptiste-wicht.developpez.com.../proc-curseur/
    http://sqlpro.developpez.com/cours/s...r_avoidCursor/

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

Discussions similaires

  1. Faire une requete avec une jointure ramenant une base SQL et un ebase Oracle
    Par Clement M dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 22/12/2014, 14h13
  2. Faire une requete sql avec hibernate
    Par Babas007 dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/05/2011, 08h18
  3. Faire une requete complexe avec des conditions
    Par student_php dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/11/2010, 10h09
  4. Faire une requete de requete en SQL <= pb avec analyse croisée
    Par capitaine dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/08/2006, 16h13
  5. Comment faire une requete liée avec une requete ?
    Par DavidDeTroyes dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2006, 13h18

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