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 :

Subquery et erreur msg 116


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Subquery et erreur msg 116
    Bonjour à tous,

    je suis nouveau ici et je n'ai pas fait de SQL depuis bien des années. Je suis confronté aujourd'hui à un soucis dans une de mes requêtes.

    Dans la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM Statistic_RecordedConversations A
      JOIN (SELECT DID, max(DateTime) MaDate
            FROM Statistic_RecordedConversations where DID IN ( Select OpenData as DID, QuestionID, InterviewID from Surveys.dbo.AData where QuestionID = 895 and InterviewID in ( select Surveys.dbo.AData.InterviewID from Surveys.dbo.AInterview, Surveys.dbo.AData where Surveys.dbo.aInterview.InterviewID = Surveys.dbo.AData.InterviewID  and completed = 1 and QuestionID = 891 and ClosedData = 4685 and CAST(EndInterview as Date) = CAST (Current_TIMESTAMP as Date)))
            GROUP BY DID ) B
      ON A.DID = B.DID
      AND A.DateTime = B.MaDate
    Ma requête me renvoi toujours le msg 116 : Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

    Je pense que l'erreur vient de mon where IN où je choisis plusieurs champs (je pense que je devrais en chercher qu'un). j'ai essayé de remplacer par un EXISTS mais le résultats du coup ne renvoi plus du tout ce que je veux.

    Merci de votre aide si vous avez une piste..

    Cordialement.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour

    C'est tellement plus facile de lire une requête quand elle est mise en forme !
    Après l'avoir fait, les erreurs sautent aux yeux : la première table dérivée renvoie plusieurs colonnes, ce qui est incohérent avec une requête de type WHERE Ma_Colonne in (...)

    Profitez de la correction pour remplacer le select * par la liste des colonnes utiles au traitement

    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 * 
    FROM Statistic_RecordedConversations A
    JOIN (SELECT DID, max(DateTime) MaDate
          FROM Statistic_RecordedConversations 
          where DID IN 
               (Select OpenData as DID
                     , QuestionID
                     , InterviewID 
                from Surveys.dbo.AData 
                where QuestionID = 895 
                  and InterviewID in 
                     (select Surveys.dbo.AData.InterviewID 
                      from Surveys.dbo.AInterview
                         , Surveys.dbo.AData 
                      where Surveys.dbo.aInterview.InterviewID = Surveys.dbo.AData.InterviewID
                        and completed = 1                      
                        and QuestionID = 891 
                        and ClosedData =4685 
                        and CAST(EndInterview as Date) = CAST(Current_TIMESTAMP as Date)
                     )
               )
          GROUP BY DID
         ) B
      ON A.DID = B.DID
     AND A.DateTime = B.MaDate

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Et aussi, pourquoi avoir fait une deuxième table dérivée là ou une simple jointure inner aurait suffit et pourquoi mélanger allègrement les jointures explicites (JOIN) et implicites (mélangées avec les critères de restriction dans le WHERE)

    Vous devez pouvoir supprimer le deuxième subselect et le remplacer par des jointures INNER en utilisant l'operateur JOIN et en ajoutant des alias aux tables plutôt que de manipuler des noms à rallonge bien peu pratiques. Préfixez toutes les colonnes par ces alias, ce sera beaucoup plus clair

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci pour votre réponse.

    Je regarde à tout cela, merci pour ces éléments !

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/04/2008, 09h58
  2. [BCK]Load dump 12.5.3 (erreur Msg 3120, Level 16, State 1- sort order)
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 25/09/2007, 07h44
  3. [ASE-15.0.2] Load dump 12.0.3 (erreur MSG 5824 - sort order)
    Par msomso dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 11/09/2007, 11h40
  4. Msg d'erreur: Erreur de traduction. Valeur hors des limites
    Par Zoilus dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/12/2005, 16h15
  5. ansi_nulls et ansi_warnings sur OPENROWSET Erreur Msg 7405
    Par Labienus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2004, 16h22

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