데이터 테이블에 특정 컬럼에 중복값을 합치는 방법이 있을까요

안녕하세요
Data table에

고유번호, 명칭, 값 의 column으로
123, 가나다, 7
234, 나다라, 8
345, 다라마, 2
123, 가나다, 1
이 있을떄

고유번호 기준으로 중복값인 123을 찾아 값을 더할 수 있을까요?
결과물은 아래처럼 나오게 하려고 하는데요
123, 가나다, 8
234, 나다라, 8
345, 다라마, 2

포럼에 중복된 항목을 제거하는 방법은 찾았으나 값 합계를 못찾아서
엑셀의 '통합’과 같은 기능처럼 data table에서 중복값의 합계를 구하는 쿼리나 방법을 문의드립니다~

확인해보시면 될듯합니다~~

아마 솔루션으로 채택된 댓글에 XAML 파일이 있을텐데 해당 파일 다운로드 받으셔서 참고하시면 될듯합니다~

1 Like

Linq Group By 를 사용해보세요.
Group By c# 코드 입니다.
쿼리 스타일과 Function 스타일 두가지 코드 입니다.
Group By 결과를 Tuple에 담아 출력 하는 코드입니다.
나온 결과를 가지고 새로운 DataTable 생성하여 처리하면 원하는 결과 얻을수 있을 것 같네요.
한번 시도해 보세요.

DataTable dt = new DataTable(“table”);
dt.Columns.Add(“col1”, typeof(string));
dt.Columns.Add(“col2”, typeof(string));
dt.Columns.Add(“col3”, typeof(int));

dt.Rows.Add(new object{“123”,“가나다”,7});
dt.Rows.Add(new object{“234”,“나다라”,8});
dt.Rows.Add(new object{“345”,“다라마”,2});
dt.Rows.Add(new object{“123”,“가나다”,1});

foreach(DataRow r in dt.Rows)
{
Console.WriteLine(String.Join(",",r.ItemArray));
}

List<ValueTuple<string,int>> group1 = (from r in dt.AsEnumerable()
group r by r.Field(“col1”) into g
select (g.Key,g.Select(d => d.Field(“col3”)).Sum())).ToList();

List<ValueTuple<string,int>> group2 = dt.AsEnumerable()
.GroupBy(r => r.Field(“col1”), r => r.Field(“col3”))
.Select(g => (g.Key, g.Sum())).ToList();

foreach(var t in group2)
{
Console.WriteLine($"{t.Item1} : {t.Item2}");
}

image

정말 감사합니다. 찾고있던 예시와 비슷하여 활용할 수 있었습니다 :slight_smile:

1 Like

상세한 설명 정말 감사합니다
생각외로 해결 방법이 다양했네요 감사합니다!

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.