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_idとでグループ化したいのですが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 には空の文字列がないことに注意してください。Anは、挿入または更新中に に''変換されます。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 に答える