开发者社区> 问答> 正文

LINQ的SQL命令(透视)

我正在将数据库从MySQL(使用的ODBC)转移到MS SQL,我想将SQL查询“翻译”到LINQ。有人可以帮我吗(每个位置的SUM收费列和按月分组的结果):

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(); 这几乎是我所需要的。也应该按年份分组,我不知道该怎么做。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 16:53:32 401 0
1 条回答
写回答
取消 提交回答
  • 这可能会有所帮助。

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

    2019-11-18 16:53:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载