문제

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 샘플을 사용하려고했습니다.

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);

다른 팁

.. 동적으로 선택하기 위해 위치를 추가하는 방법을 알고 있습니까? 예를 들어 목록/배열에서.

편집 : .. 또는 동적으로로드 할 위치를 만들고 선택하기 전에 문장에로드해야 할 위치를 설정합니다. 이게 가능해?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top