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_idand分组external_no,这很好用,我得到 128 条记录。但我想查看所有列,而不仅仅是那些 2。我试图将它们添加到select,但随后我得到了一个错误group by。我还需要 4 列,因为我需要抓取它们以使用所选数据创建新记录。

4

2 回答 2

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

于 2013-01-14T08:22:56.500 回答
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)
于 2013-01-14T07:59:47.207 回答