Oracle,获取所有列

时间:2013-01-14 07:56:36

标签: oracle select

我收到了这个声明:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在汇总字段数量,总和等时,您无法获得所有列值。

不是同样的结果,但这可能对你有帮助。

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)