LINQ 的 SQL 命令(旋转)

标签 sql linq pivot

我正在将数据库从 MySQL(使用 ODBC)移动到 MS SQL,我想将 SQL 查询“翻译”为 LINQ。有人可以帮我解决这个问题吗(它应该按月计算每个位置和组结果的 SUM Charge 列):

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 示例:

Is it possible to Pivot data using 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);

关于LINQ 的 SQL 命令(旋转),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183585/

相关文章:

C# LINQ 将一个项目附加到数组的末尾

scala - 使用 Spark Scala 进行透视后按名称选择具有多个聚合列的列

sql - 将行查询到列中

SQL - 正确查询按其他表中的值对项目进行排序

mysql - 有没有办法删除重复项?

c# - LinqDataSource 选择语法

sql-server - 在 EF4 中使用 NOLOCK 提示?

sql-server - SQL Server 递归 CTE 和数据透视不能一起工作

mysql - 如何导入 SQL 文件 (MySQL)

sql - 用于提高 SQL Server 上多个连接性能的索引 View