如何按月份&id查询sql以获得sum

wj8zmpe1  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(528)

我的表格数据如下:

我想将asp.net表显示为:

下面是按组月份和商店代码获取数据的代码

  1. var gridData = data
  2. .GroupBy(
  3. x => new {
  4. Convert.ToDateTime(x.InspectedAt).Month,
  5. Convert.ToDateTime(x.InspectedAt).Year,
  6. x.ShopCode
  7. }
  8. )
  9. .Select(x => new InspectionSearchData
  10. {
  11. month = x.Key.Month,
  12. shopCode = x.Key.ShopCode,
  13. total = (int)x.Sum(a => a.PerformCount)
  14. })
  15. .OrderBy(x => x.month)
  16. .ToList();

但我不知道如何在asp.NETHTML表中显示像图2这样的数据。
有人能建议如何在asp.net中这样做吗?
提前谢谢。

50pmv0ei

50pmv0ei1#

创建数据透视表:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. namespace ConsoleApplication1
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. DataTable dt = new DataTable();
  13. dt.Columns.Add("shopcode", typeof(string));
  14. dt.Columns.Add("month", typeof(int));
  15. dt.Columns.Add("count", typeof(int));
  16. dt.Rows.Add(new object[] { "007", 4, 1 });
  17. dt.Rows.Add(new object[] { "007", 6, 2 });
  18. dt.Rows.Add(new object[] { "009", 7, 1 });
  19. dt.Rows.Add(new object[] { "010", 8, 1 });
  20. dt.Rows.Add(new object[] { "010", 5, 1 });
  21. dt.Rows.Add(new object[] { "011", 9, 5 });
  22. int minMonth = dt.AsEnumerable().Min(x => x.Field<int>("month"));
  23. int maxMonth = dt.AsEnumerable().Max(x => x.Field<int>("month"));
  24. DataTable pivotTable = new DataTable();
  25. pivotTable.Columns.Add("shopcode", typeof(string));
  26. for (int i = minMonth; i <= maxMonth; i++)
  27. {
  28. pivotTable.Columns.Add(i.ToString(), typeof(string));
  29. }
  30. var groups = dt.AsEnumerable().GroupBy(x => x.Field<string>("shopcode"));
  31. foreach(var group in groups)
  32. {
  33. DataRow newRow = pivotTable.Rows.Add();
  34. newRow["shopcode"] = group.Key;
  35. var months = group.GroupBy(x => x.Field<int>("month"));
  36. foreach(var month in months)
  37. {
  38. newRow[month.Key.ToString()] = month.Sum(x => x.Field<int>("count"));
  39. }
  40. for(int i = minMonth; i <= maxMonth; i++)
  41. {
  42. if(newRow[i.ToString()] == DBNull.Value)
  43. {
  44. newRow[i.ToString()] = 0;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
展开查看全部

相关问题