-2
votes

subquiery retourner plus d'une ligne

J'ai 2 tables que j'essaye de extraire des informations. Il s'agit d'un échantillon des tables ci-dessous car ce sont de grandes tables. Je veux que la description de la table 1 soit sur une colonne Key_Event en regardant dans le tableau 2 et la seule colonne commune est une colonne d'application. Mais l'erreur a vécu que la sous-requête ne peut pas retourner plus d'une ligne.

     SELECT SELECT  NVL(TO_CHAR(TRANS.ID), 'NULL') AS ID
       , 'HEADER'

       ,NVL(TO_CHAR((SELECT L_APP.DESCRIPTION  
  FROM  L_APP L_APP



      WHERE  EXISTS  ( SELECT 1 FROM TRANS WHERE L_APP.APP =                  TRANS.APP AND LANGUAGE = 2


      )

         )), 'NULL') AS KEY_EVENT


2 commentaires

Une lecture de la question plusieurs fois mais je ne peux toujours pas comprendre ce que vous voulez réellement. Pourriez-vous ajouter l'entrée et la sortie souhaitée correspondante?


Je veux obtenir une description de valeur basée sur l'application de colonne commune


3 Réponses :


1
votes

Vous devez utiliser une agrégation pour combiner des rangées. Vous ne pouvez pas montrer toutes les lignes dans une cellule. Ainsi, Listagg est ce que vous recherchez pour concentrer des chaînes.

Voici un exemple de requête: P>

SELECT  
NVL(TO_CHAR(TRANS.ID), 'NULL') AS ID, 
'HEADER',
NVL(
    TO_CHAR(
            (
                SELECT LISTAGG ( L_APP.DESCRIPTION ,',' ) 
                FROM  L_APP 
                WHERE  EXISTS  ( 
                                SELECT 1 
                                FROM TRANS 
                                WHERE L_APP.APP =                  TRANS.APP AND LANGUAGE = 2
                            )

           )
        ), 'NULL'
) AS KEY_EVENT


1 commentaires

Merci. mais je reçois cette erreur "Missing% de mot clé" de la ligne 8 qui est de l_app



1
votes

De ce que j'ai compris, vous avez besoin d'une description en anglais ( langue = 2 ) comme colonne key_event et une liste de toutes les descriptions existantes dans d'autres langues. S'il vous plaît regarder cette syntaxe. J'ai également joint une démo qui montre comment cette requête fonctionne avec des données que vous avez fournies.

DBFiddle Demo xxx

ressemble à 12 et 27 < / Code> sont également des descriptions anglaises, si vous souhaitez les utiliser (au cas où 2 est absent) exécutez ceci: xxx


5 commentaires

Merci réfléchir. J'utilise le premier. La requête dit que j'ai de nombreuses valeurs dans cette ligne Listagg (description, ',') au sein du groupe (commander par t1.Language) liste


Si vous voulez dire résultat de la concaténation à chaîne, c'est trop long Vous ne pouvez pas utiliser listagg () ou vous devez utiliser l'une des solutions de Cet article .


Poudre, ce n'est pas le résultat d'une concaténation à la chaîne. La ligne est en train de se plaindre de trop de valeurs est NVL (max (cas lorsque la langue = 2 puis description finale), 'null') key_event,


Désolé, mais je ne comprends pas. Je vous ai montré une solution, je vous ai montré Travailler dbfiddle avec vos propres données. Veuillez lire Comment créer un exemple minimal, complet et vérifiable .


Cela fonctionne, mais crée duplicata et ne pouvait également pas s'intégrer facilement avec un autre code que j'ai



0
votes

J'ai pu utiliser cette réponse dans cette page et ITT n'a créé aucun duplicata pendant la concaténation dans la concaténation dans l'une des archives:

sous-requier eror et trop de valeurs utilisant xmllagg

le code final est xxx


0 commentaires