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 :

Traitement sous requête avec plusieurs lignes (SQL0811 : Résultat de SELECT dépasse une ligne.)


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 2
    Par défaut Traitement sous requête avec plusieurs lignes (SQL0811 : Résultat de SELECT dépasse une ligne.)
    Hello,

    j'ai ce problème qui me bloque et je n'arrive pas à trouver une solution.

    J'ai une requete select avec plusierus sous-requetes. Je peux pas avoir un résultat puisque j'ai plusieurs lignes dupliqué dans les sous-requetes et d'aprés le msg d'erreur, une seule ligne est admise.

    voici ma requete :

    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  A.DTNUMEXE, A.DTMOIEXE, A.DTANNQIT, A.DTMOIQIT, A.DTCODBRC, A.DTSERQIT, A.DTPLCQTC,A.DTCATPOL, A.DTCODRSQ, A.DTNATRSQ, A.DTCODPRO, A.DTTYPQIT, A.DTLIBTYP, A.DTCODETA, 
            A.DTLIBETA, A.DTCODAGC, A.DTNUMCLT, A.DTNATCLT, A.DTJJDVAL, A.DTMMDVAL, A.DTAADVAL,A.DTJJFVAL, A.DTMMFVAL, A.DTAAFVAL, A.DTCODART, A.DTCODGRN, A.DTPRMNET, A.DTMNTACC, 
            A.DTJJEMIS, A.DTMMEMIS, A.DTAAEMIS, CASE WHEN A.DTNUMCLT >= 50000 AND A.DTNUMCLT <= 100000 THEN 'OUI' ELSE 'NON' END  DTCLTIMP,               
            CASE UPPER(A.DTPLCEXO) WHEN 'O' THEN 'OUI' WHEN 'N' THEN 'NON' END  DTEXOTAX, A.DTMNTCOM ,
     
     
    	(SELECT  X.VGCPTPTN FROM   AUTOPRD.AUVCLGRPP0  AS X where (X.VGNUMPLC = A.DTPLCQTC )  AND (X.VGCODGRN=  A.DTCODGRN) 
    	AND (X.VGJJOCCU * 1000000 + X.VGMMOCCU * 100000000 + X.VGAAOCCU * 10000000000 + X.VGNUMAVT = (SELECT  MAX(X.VGJJOCCU * 1000000 + X.VGMMOCCU * 100000000 + X.VGAAOCCU * 10000000000 + X.VGNUMAVT ) AS 
            DATEOCC FROM AUTOPRD.AUVCLGRPP0
            WHERE     (X.VGMMOCCU * 100000000 + X.VGAAOCCU * 10000000000 <= (A.DTAADVAL * 10000 + A.DTMMDVAL * 100 + A.DTJJDVAL)*1000000 )  AND (X.VGNUMPLC =A.DTPLCQTC) AND (X.VGCODGRN=  A.DTCODGRN))))
     
     
    FROM TRANSFERT.DTQTTNCPP1 AS A
    WHERE   (A.DTCODBRC = 1) AND  (A.DTCODGRN>0)   AND  (DTNUMEXE =2020)

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Difficile de lire une telle requête où tout est jeté en vrac, avec des sauts de lignes arbitraires et aucune tentative de différencier mots clés et identifiants par la casse.
    C'est rarement une bonne idée d'utiliser des sous-requêtes scalaires. Cela nuit à la lisibilité de la requête et ce n'est pas toujours bien pris en charge par l'optimiseur au moment de la préparation du plan d'exécution. Des tables dérivées voire des CTE seront bien plus adaptées dans la majorité des cas.
    Quant à la correction de l'erreur, c'est d'un point de vue fonctionnel qu'il va falloir réétudier cette requête pour comprendre la raison pour laquelle plusieurs lignes sont retournées au lieu d'une seule.
    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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    ce n'est pas très compliqué de bien mettre en forme une requête pour la rendre lisible.... Il y a des site web pour cela et vous pouvez mettre dans SSMS l'add-in SQL Formater de Apex pour ce faire...
    Exemple :
    http://www.dpriver.com/pp/sqlformat.htm

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    SELECT A.dtnumexe,
           A.dtmoiexe,
           A.dtannqit,
           A.dtmoiqit,
           A.dtcodbrc,
           A.dtserqit,
           A.dtplcqtc,
           A.dtcatpol,
           A.dtcodrsq,
           A.dtnatrsq,
           A.dtcodpro,
           A.dttypqit,
           A.dtlibtyp,
           A.dtcodeta,
           A.dtlibeta,
           A.dtcodagc,
           A.dtnumclt,
           A.dtnatclt,
           A.dtjjdval,
           A.dtmmdval,
           A.dtaadval,
           A.dtjjfval,
           A.dtmmfval,
           A.dtaafval,
           A.dtcodart,
           A.dtcodgrn,
           A.dtprmnet,
           A.dtmntacc,
           A.dtjjemis,
           A.dtmmemis,
           A.dtaaemis,
           CASE
             WHEN A.dtnumclt >= 50000
                  AND A.dtnumclt <= 100000 THEN 'OUI'
             ELSE 'NON'
           END DTCLTIMP,
           CASE Upper(A.dtplcexo)
             WHEN 'O' THEN 'OUI'
             WHEN 'N' THEN 'NON'
           END DTEXOTAX,
           A.dtmntcom,
           (SELECT X.vgcptptn
            FROM   autoprd.auvclgrpp0 AS X
            WHERE  ( X.vgnumplc = A.dtplcqtc )
                   AND ( X.vgcodgrn = A.dtcodgrn )
                   AND ( X.vgjjoccu * 1000000 + X.vgmmoccu * 100000000 +
                         X.vgaaoccu * 10000000000 +
                               X.vgnumavt = (SELECT Max(X.vgjjoccu * 1000000 +
                                                        X.vgmmoccu * 100000000 +
                                                        X.vgaaoccu * 10000000000
                                                        +
           X.vgnumavt) AS
           DATEOCC
           FROM   autoprd.auvclgrpp0
           WHERE  ( X.vgmmoccu * 100000000 +
           X.vgaaoccu * 10000000000
           <= (
           A.dtaadval * 10000 + A.dtmmdval * 100
           +
           A.dtjjdval ) * 1000000
           )
           AND ( X.vgnumplc = A.dtplcqtc )
           AND ( X.vgcodgrn = A.dtcodgrn )) ))
    FROM   transfert.dtqttncpp1 AS A
    WHERE  ( A.dtcodbrc = 1 )
           AND ( A.dtcodgrn > 0 )
           AND ( dtnumexe = 2020 )
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [PSQL] Sous requête renvoyant plusieurs lignes
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/03/2017, 13h26
  2. Sous-requête avec plusieurs résultats souhaités
    Par devlm dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/08/2014, 12h02
  3. sous requête avec plusieurs lignes
    Par souarit dans le forum Bases de données
    Réponses: 0
    Dernier message: 09/02/2009, 01h18
  4. Sous requête avec plusieurs retours
    Par grunk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/10/2007, 13h57
  5. Requête avec plusieurs paramètres d'un même champ d'une table
    Par jb.julien dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/08/2007, 09h43

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