2013-01-14 73 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)