2014-01-11 15 views
1
SET colsep '|' 
SET echo OFF 
SET feedback OFF 
SET linesize 1000 
SET pagesize 0 
SET sqlprompt '' 
SET trimspool ON 
SET headsep OFF 

spool monitor.csv 

SELECT error_id, '|', error_desc, '|', b.control_by 
    FROM error a, component_info b 
WHERE a.error_id IN (
     SELECT error_id FROM component_thresh JOIN component_info USING (component_id)) 
GROUP BY b.control_by 
ORDER BY a.error_desc 
/

我需要組由列在不同的表然後通過error_desc訂購它然後卷軸出來的結果。ORA-00979不是GROUP BY表達幫助卷軸

編輯:啊!我需要通過兩者來訂購。

+1

在SELECT語句中使用Oracle(和大多數其他SQL實現)中的GROUP BY時,只能使用用於分組和/或聚合值的字段(如COUNT,MIN ','SUM'等) –

+0

你爲什麼要分組? – San

+0

客戶端請求 – user2992757

回答

0

看起來您要將所有具有相同control_by的行排在一起,才能夠瀏覽它們。 GROUP BY試圖做的是把所有東西放在一行中,而且它看起來並不像你想要的那樣。

您可以使用ORDER BY子句而不是GROUP BY。這將使所有具有相同control_by的行一起出現。另外,你可以GROUP BY b.control_by, a.error_id;並得到相同的結果。最好的選擇是使用ORDER BY control_by, error_desc

select error_id, '|', error_desc, '|', b.control_by from 
    error a, component_info b where 
    a.error_id in (
    select error_id 
    from component_thresh 
    join component_info using(component_id) 
    ) 
order by b.control_by, a.error_desc; 
/

這應該爲您的客戶做訣竅。