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 :

Besoin d'aide sur une requête [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    Par défaut Besoin d'aide sur une requête
    Bonjour à tous,

    j'ai besoin d'un coup de pouce car je ne trouve pas comment arriver à mes fins avec une requête.

    Supposons que j'ai une table qui contienne des données dans une colonne que voudrais distinguer en les détectant par une autre colonne. Comment puis-je seulement renommer la colonne pour cette plage de donnée. J'ai tenté bien des pirouettes mais j'en suis rendu à passer par une table temporaire. Pourtant je suis certain que je peux optimiser en passant par la requête.

    Voici un exemple

    À la base la requête qui me retourne toutes les données est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
           [Ressource]
          ,[Courriel]
          ,[AD]
          ,[Projet]
          ,[Tache]
          ,[Description]
          ,[Hrs.Std.]
          ,[Hrs.Suppl.]
          ,CAST([Debut]AS DATE) AS [Debut]
          ,CAST([Fin] AS DATE) AS [Fin] 
    FROM [dbo].[FDT]

    Mais je voudrais différencier les activité administrative des autres projets. Par contre toutes les heures sont compilés dans la colonne Hrs.Std.

    J'avais pensé faire un WHERE projet <> 'Admin' et l'unir à la même requête qui aurait une clause WHERE = 'Admin' en renommant la colonne Hrs.Std. par Hrs.Admin. Mais si je fais un union sur la requête originale une seule des colonnes sera retournée en combinant les données. Donc c'est inutile...

    J'ai ensuite voulu faire un INNER JOIN selon le principe table et table1 en écartant les lignes contenant des NULL mais je créer des doublons

    Est-ce que quelqu'un aurait une idée qui me simplifierait la vie. Car en ce moment je créer une table temporaire contenant les deux colonnes std et admin et dans laquelle j'exporte les données d'une première requête pour ensuite insérer l'autre. Ensuite je traite la table temporaire. À terme ça va prendre du temps traiter ça

    Des idées ?

  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,

    Votre demande n'est très claire. Un jeu d'essai + résultat attendu aiderait à mieux comprendre.


    Est-ce ceci que vous voulez ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
           [Ressource]
          ,[Courriel]
          ,[AD]
          ,[Projet]
          ,[Tache]
          ,[Description]
          ,CASE WHEN Projet <> 'Admin' THEN [Hrs.Std.] END AS HeuresNormales
          ,CASE WHEN Projet = 'Admin' THEN [Hrs.Std.] END AS HeuresAdmin
          ,[Hrs.Suppl.]
          ,CAST([Debut]AS DATE) AS [Debut]
          ,CAST([Fin] AS DATE) AS [Fin] 
    FROM [dbo].[FDT]
    Attention au cas des NULL si la colonne Projet est nullable

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Ça fait ce que je veux. Je ne connaissais pas les "case when" merci.

    Mais concernant le :

    Citation Envoyé par aieeeuuuuu Voir le message

    Attention au cas des NULL si la colonne Projet est nullable

    S'il y avait des NULL comment je pourrais traiter le cas ?

  4. #4
    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
    comme vous le souhaitez !

    par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
           [Ressource]
          ,[Courriel]
          ,[AD]
          ,[Projet]
          ,[Tache]
          ,[Description]
          ,CASE WHEN Projet = 'Admin' THEN NULL ELSE [Hrs.Std.] END AS HeuresNormales
          ,CASE WHEN Projet = 'Admin' THEN [Hrs.Std.] END AS HeuresAdmin
          ,[Hrs.Suppl.]
          ,CAST([Debut]AS DATE) AS [Debut]
          ,CAST([Fin] AS DATE) AS [Fin] 
    FROM [dbo].[FDT]

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

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  2. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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