문제
DB를 MySQL (중고 ODBC)에서 MS SQL로 이동하고 SQL 쿼리를 LINQ로 "번역"하고 싶습니다. 누군가 나를 도와 줄 수 있습니까 (모든 위치 및 그룹 결과에 대해 요금 열을 합산해야합니다) :
SELECT
sum(case when Location="Location1" then Charge else 0 end) as Location1,
sum(case when Location="Location2" then Charge else 0 end) as Location2,
sum(case when Location="Location3" then Charge else 0 end) as Location3,
MAKEDATE(YEAR(OrderTime),DAYOFYEAR(OrderTime)) AS date FROM Sales
GROUP BY YEAR(OrderTime),MONTH(OrderTime)
ORDER BY OrderTime DESC
?
출력은 다음과 같습니다.
Location1 | Location2 | Location3 | date
편집하다:
여기에서 LINQ 샘플을 사용하려고했습니다.
var query = context.log_sales
.GroupBy(c => c.OrderTime)
.Select(g => new
{
Date = g.Key,
Location1 = g.Where(c => c.Location == "Location1").Sum(c => c.Charge) ?? 0,
Location2 = g.Where(c => c.Location == "Location2").Sum(c => c.Charge) ?? 0
}).ToList();
그리고 그것은 거의 내가 필요한 것입니다. 해마다 그룹화해야하며 어떻게 해야할지 모르겠습니다.
해결책
이것은 도움이 될 수 있습니다.
context.log_sales
.GroupBy(s => new {Year = OrderTime.Year, Month = OrderTime.Month})
.Select
( g => new {
Date = new DateTime(g.Key.Year, g.Key.Month, 1),
Location1 = g.Where(s => s.Location == "Location1").Sum(s => s.Charge),
Location2 = g.Where(s => s.Location == "Location2").Sum(s => s.Charge),
Location3 = g.Where(s => s.Location == "Location3").Sum(s => s.Charge),
}
)
.OrderBy(x => x.Date);
다른 팁
.. 동적으로 선택하기 위해 위치를 추가하는 방법을 알고 있습니까? 예를 들어 목록/배열에서.
편집 : .. 또는 동적으로로드 할 위치를 만들고 선택하기 전에 문장에로드해야 할 위치를 설정합니다. 이게 가능해?
제휴하지 않습니다 StackOverflow