2013-01-12 5 views
0

가 어떻게 복제 할 수는 지금까지 GROUPBY + 케이스 합계 (x는)> 0 다음 합계 (x)의 다른 0

SELECT KEY_COLUMN, 
     CASE WHEN SUM(COLUMN2) < 0 THEN SUM(COLUMN2) ELSE 0 END AS NewColumn 
FROM TABLE 
GROUP BY KEY_COLUMN 

LINQ

에 다음과 같은 때 나는 위의

var result = from a in source 
       group a by a.Key_Column 
        into g 
        select new 
        { 
         Key_Column = g.Key, 
         NewColumn = g.Where(item => item.Column2 < 0) 
            .Sum(item => item.Column2) 
}; 

을 다음과 같이 올 수있다 코드는 실제로 음수인지 아닌지를 결정하기 전에 Column2를 요약하지 않습니다.

답변

2
var query = from a in db.Table 
      group a by a.Key_Column into g 
      let sum = g.Sum(item => item.Column2) 
      select new { 
       Key_Column = g.Key, 
       NewColumn = sum < 0 ? sum : 0 
      }; 
+1

좋은, 덕분에 나는 버전이 더 효율적이라고 생각 – Pak

+0

을 lazyberezovsky,하지만, 값이 올 조건부 사물의 종류를 할 너무 많은 열이 때 내가했던 방법을 사용하는 것이 좋습니다 할 내 대답은 아래에? (죄송 미안하지만이 코멘트에 그것을 형식화 할 수 없으므로 답변으로 게시했습니다) – Pak

0

이 같지 않습니까?

var query = from r in db.Table 
    group r by r.KEY_COLUMN into g 
    select new { 
    KEY_COLUMN = g.Key, 
    NewColumn = g.Sum(x => x.COLUMN2) < 0 ? g.Sum(x => x.COLUMN2) : 0 
}; 
+0

거의이 경우 합계가 두 번 계산됩니다 –