2013-08-22 2 views
0

StackOverflow를 통해 한 번 보았지만 몇 가지 게시물에서 시도했지만 완전히 멈췄습니다. 기본적으로 아래에 "LinqPad에서 테스트 한"쿼리가 있는데, "합계"값에 대해 동일한 값을 두 번 제공합니다. 내가 실제로 원하는 것은 동일한 테이블에 대한 조인이며 날짜별로 그룹화하고 본질적으로 동일한 열 (값)의 합계를 조인 된 테이블과 원래 테이블에서 표시하는 것입니다.Linq SQL이 그룹 및 합계가있는 동일한 테이블에 있습니다.

LINQ에서 별칭 (예 : 'NewFieldName')을 사용할 수 없다는 것을 알았습니다. 따라서 t.Value와 p.Value를 합산하여 SiteID와 EntryDate 옆에 표시해야합니다. 내 결과에.

(from p in DailyStatistics 
join t in DailyStatistics on new { p.EntryDate, p.SiteID} equals new { t.EntryDate, t.SiteID} 
where t.Metric == "MyVisitors" 
&& p.Metric == "MyVisits" 
&& p.EntryDate >= DateTime.Parse("2013-08-15") 
&& p.EntryDate <= DateTime.Parse("2013-08-21") 
group p by new { t.SiteID, p.EntryDate } into s 
orderby s.Key.EntryDate 
select new {s.Key.SiteID, s.Key.EntryDate, SumVisits = s.Sum(t => t.Value), SumVisitors = s.Sum(x => x.Value) }) 

해봤 특히이 하나, 그러나 아주 내 요구에 적응하지 못했습니다 : SQL multiple joins and sums on same table

모든 아이디어를 즐겁게

+0

'어떤 생각이라도 괜찮습니까? 나는 당신의 '받아 들여진'이'입양 된'을 의미하기를 바랍니다 :))) –

+0

동일한 필드에서 같은 테이블을 조인하고 있습니까? –

+0

@KingKing 확실하게, 나는 그것을 받아들이 고, 실패한 다음 다시 시도한다 .--) 순간적으로 내 작업 하루 인 것 같다 :-) – Dominik

답변

2

:-) 받아 들여질 것이다 편집을

where 절을 깜빡입니다.

DailyStatistics 
.Join 
(
    DailyStatistics, 
    x=>new{x.EntryDate, x.SiteID}, 
    x=>new{x.EntryDate, x.SiteID}, 
    (o,i)=>new 
    { 
     VisitorEntry=i.Metric, 
     VisitEntry=o.Metric, 
     VisitorDate = i.EntryDate , 
     VisitDate = o.EntryDate , 
     i.SiteID, 
     VisitorValue = i.Value, 
     VisitValue = o.Value 
    } 
) 
.GroupBy 
(
    x=> 
    new 
    { 
     x.SiteID, 
     x.VisitDate 
    } 
) 
.Where 
(
    x=> 
    x.VisitorEntry == "MyVisitors" && 
    x.VisitEntry== "MyVisits" && 
    x.VisitDate >= DateTime.Parse("2013-08-15") && 
    x.VisitDate <= DateTime.Parse("2013-08-21") 
) 
.Select 
(
    x=> 
    new 
    { 
     x.Key.SiteID, 
     x.Key.VisitDate, 
     SumVisits = s.Sum(t => t.VisitValue), 
     SumVisitors = s.Sum(x => x.VisitorValue) 
    } 
) 
.OrderBy 
(
    x=>x.VisitDate 
) 
+0

감사합니다. Linq 형식이 다르긴하지만 귀하의 게시물에서 답을 얻을 수있었습니다. "group p by new ..."대신 "group new {... 익명 유형} new ..."을해야했습니다. – Dominik

+0

죄송하지만 쿼리 구문에는 사용되지 않았습니다. . :-) –