2016-11-17 79 views
-1

當我運行下面的查詢時,出現錯誤。我收到錯誤

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; 

錯誤消息:

「EMP_ID」:無效的標識符

我想在這裏是要創建一個標題用逗號

+0

通常這是一個好主意,告訴我們**你得到了什麼**錯誤,雖然我可以猜測在這種情況下。 –

回答

0

當您使用UNION或UNION ALL,UNION/UNION ALL每邊選擇的列數必須相同。

在你的例子中,你在第一個查詢(4個字符串的連接)中選擇1列,在第二個中選擇4個 - 因此是錯誤。

+0

我得到了託尼,我在這裏做的是創建CSV文件,它將在標題列表中包含所有列的標題,但它只能在沒有子句的情況下運行。 – Sohel

+0

@sohel - 這裏有專門的工具,你爲什麼試圖用手工做?學習正確的工具花費的時間要少於修復這種天真的方法所需的時間。 – mathguy

0

你有幾個問題。

當你這樣做,它形成一個單一的列。

'EMP_ID'||','||'LAST_NAME'||','||'FIRST_NAME'||','||'SALARY' 

然後你想聯合4列 - 兩個選擇語句必須有一個聯合的列數相同。

下面的查詢將工作,因爲現在它的列相同的#1只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; 

根據你得到了錯誤,請確保您有一個列在你的員工表稱爲「EMP_ID」。您還必須按列刪除訂單,因爲它們需要出現在選擇中。

+0

您好亨利,您的查詢正在工作,但我想添加order by子句示例: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; – Sohel

+0

我修改了查詢來預先設定它,所以它按照您要查找的順序出現。我真的不建議這樣做,但它會產生你正在尋找的結果。 – Henry