【问题标题】:Transpose columns to rows and date row to columns将列转置为行,将日期行转置为列
【发布时间】:2023-03-27 01:07:01
【问题描述】:

这是一个 ASP.NET MVC 项目。目前我有一张像这样的桌子:

Skill           Date        Offered     Answered    Abandoned
SampleSkill1    12/1/2013   53585       52549       1036
SampleSkill2    12/1/2013   7170        6997        173
SampleSkill1    11/1/2013   45635       45189       446
SampleSkill2    11/1/2013   6481        6378        103
SampleSkill1    10/1/2013   54838       54208       630
SampleSkill2    10/1/2013   7361        7235        126

我正在尝试获取表格中的数据,例如:

SampleSkill1

Type        Oct     Nov     Dec
Offered     53585   52549   1036
Answered    45635   45189   446
Abandoned   54838   54208   630

我能得到的最接近的是做这样的事情:

var StatsList = db.Stats.Where(c => c.Skill == "SampleSkill1").ToList();
var OfferedStatsQuery = StatsList
    .GroupBy(c => c.Skill)
    .Select(g => new StatsPivot {
        Skill = g.Key,
        Oct = g.Where(c => c.Date.Month == 10).Sum(c => c.Offered),
        Nov = g.Where(c => c.Date.Month == 11).Sum(c => c.Offered),
        Dec = g.Where(c => c.Date.Month == 12).Sum(c => c.Offered)
    });
var AnsweredStatsQuery = StatsList
    .GroupBy(c => c.Skill)
    .Select(g => new StatsPivot {
        Skill = g.Key,
        Oct = g.Where(c => c.Date.Month == 10).Sum(c => c.Answered),
        Nov = g.Where(c => c.Date.Month == 11).Sum(c => c.Answered),
        Dec = g.Where(c => c.Date.Month == 12).Sum(c => c.Answered)
    });

我确信这不是执行此类操作的最佳/正确方法,但我是 LINQ 的新手。关于如何有效地达到预期结果的任何建议?

【问题讨论】:

    标签: c# sql asp.net-mvc linq transpose


    【解决方案1】:

    当您将 Linq 用于此类事情时。修改代码并不容易。所以尝试从数据库端做这些事情..

    请参阅以下示例..

    http://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query

    http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

    【讨论】:

      【解决方案2】:

      我的建议是在数据库端(可能通过存储过程)而不是在代码中进行。不太确定这个建议是否对你有限制,因为这样你的工作就会变得非常容易、高效,而且你也有很多选择。检查链接here 以获取类似问题的答案。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        • 2023-03-27
        • 2019-08-04
        相关资源
        最近更新 更多