2016-11-17 1 views
-1

Lorsque j'exécute la requête ci-dessous, j'obtiens une erreur.Je reçois une erreur

SELECT 'EMP_ID'||','||'LAST_NAME'||','||'FIRST_NAME'||','||'SALARY' 
    FROM DUAL 
    UNION ALL 
    SELECT EMP_ID,LAST_NAME,FIRST_NAME,SALARY 
    FROM EMPLOYEES 
    ORDER BY EMP_ID,LAST_NAME,FIRST_NAME; 

message d'erreur:

"EMP_ID": identifiant invalide

Ce que je suis en train ici est de créer un en-tête avec une virgule

+0

Normalement, c'est une bonne idée de nous dire ** quelle ** erreur vous obtenez, mais je peux deviner dans ce cas. –

Répondre

0

Lorsque vous utilisez UNION ou UNION ALL, le nombre de colonnes sélectionnées de chaque côté de UNION/UNION ALL doit être le même.

Dans votre exemple, vous sélectionnez 1 colonne dans la première requête (la concaténation de 4 chaînes) et 4 dans la seconde - d'où l'erreur.

+0

J'ai obtenu ce Tony, ce que je fais ici en créant un fichier CSV qui aura en-tête toute la colonne dans la liste de sélection mais cela ne fonctionne que sans clause order by. – Sohel

+0

@sohel - il existe des outils spécialisés pour cela, pourquoi essayez-vous de le faire à la main? Il faut beaucoup moins de temps pour apprendre les bons outils que pour corriger ces approches naïves. – mathguy

0

Vous avez eu quelques problèmes.

Lorsque vous faites cela, il forme une seule colonne. Ensuite, vous essayez d'union 4 colonnes - les deux instructions select doivent avoir le même nombre de colonnes dans une union.

La requête ci-dessous fonctionnera, parce que maintenant il est le même # 1 des colonnes seulement 1

SELECT 'EMP_ID'||','||'LAST_NAME'||','||'FIRST_NAME'||','||'SALARY' 
    FROM DUAL 
    UNION ALL 
    SELECT EMP_ID || ',' || LAST_NAME || ',' || FIRST_NAME || ',' ||SALARY 
    FROM (Select * from EMPLOYEES order by EMP_ID,LAST_NAME,FIRST_NAME) e1; 

Sur la base de l'erreur que vous avez, assurez-vous que vous avez une colonne appelée « EMP_ID » dans votre table employees. Vous devrez également laisser tomber l'ordre par colonne, car ils doivent être présents dans la sélection, ce qui n'est pas le cas.

+0

Salut Henry, votre requête fonctionne mais je veux ajouter un ordre par exemple de clause: SELECT 'EMP_ID' || ',' || 'LAST_NAME' || ',' || 'FIRST_NAME' || ',' || ' SALAIRE ' FROM DUAL UNION ALL SELECT EMP_ID || ',' || LAST_NAME || ',' || FIRST_NAME || ',' || SALAIRE FROM EMPLOYEES COMMANDER PAR EMP_ID, LAST_NAME, FIRST_NAME; – Sohel

+0

J'ai modifié la requête pour la trier, donc elle sort dans l'ordre que vous recherchez. Je ne recommande vraiment pas de faire les choses de cette façon, mais cela produira le résultat que vous recherchez. – Henry