2013-01-14 100 views
0

我得到了這樣的說法:甲骨文,讓所有列

select count(*), 
     article_no_external, 
     article_group_id 
    from tbl_erp_article 
where article_no_external != ' ' 
group by article_no_external, article_group_id 
having count(*) >1 

我想按group_idexternal_no,這工作得很好,我得到128條記錄。但我希望看到所有列不僅僅是那些2.我試圖將它們添加到select,但隨後出現group by錯誤。我需要4個列,因爲我需要抓住它們來使用選定的數據創建新記錄。

回答

2
select article_no_external, article_group_id, col2, col3, col4, col5 
from (
    select article_no_external, article_group_id, col2, col3, col4, col, 
     count(*) over (partition by article_no_external, article_group_id) as cnt 
    from tbl_erp_article 
    where article_no_external <> ' ' 
) 
where cnt > 1; 

如果你想找到非空的VARCHAR列記住,Oracle沒有一個空字符串。在插入或更新期間,''轉換爲NULL。所以你可能想要where article_no_external IS NOT NULL

+0

這給了我不同數量的記錄,200多 –

+0

@BartaTamás:你的舊語句對'article_no_external,article_group_id'(因爲group by)做了一個截然不同的處理,現在沒有被應用。但是,當你想看到更多的列時,「distinct」可能不起作用。您需要使用相同的'article_no_external,article_group_id'組合來挑選行的某種標準。 –

+0

對,我拿這個。謝謝你,先生。 –

1

當你收集您的字段數量,金額等

不exacly同樣的結果,但是這可能會幫助你,你不能讓所有的列值。

select * 
from tbl_erp_article 
where article_no_external != ' ' and 
(article_no_external, article_group_id) in (
select article_no_external, article_group_id 
from tbl_erp_article 
where article_no_external != ' ' 
group by article_no_external, article_group_id 
having count(*) >1)