asp.net 如何将数据表转换为数据透视表或矩阵表

rqcrx0a6  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(92)

这是我的数据表,我需要将它的数据可视化为一个“透视表”或“矩阵表”。所以,我有一个特殊的情况是:我在表中有两列
来自表格:
| 团队编号|大小|数量| Qty |
| --|--|--| ------------ |
| 团队01| S型|十个| 10 |
| 团队02|中|二十个| 20 |
| 团队03| L型|三十个| 30 |
| 团队01|中|四十个| 40 |
| 团队02|中|50人| 50 |
至手术台:
| 大小|2023年8月4日|2023年8月5日| 8/5/2023 |
| --|--|--| ------------ |
| 中|零|四十个| 40 |
| S型|十个|零| null |
| 中|二十个|50人| 50 |
| L型|三十个|零| null |
我不知道该怎么尝试。但我喜欢不循环地运行。
x1c 0d1x的数据

vq8itlhq

vq8itlhq1#

尝试以下操作:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication2
{
    class Program
    { 
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Date", typeof(DateTime));
            dt.Columns.Add("TeamNo", typeof(string));
            dt.Columns.Add("Size", typeof(string));
            dt.Columns.Add("Qty", typeof(int));

            dt.Rows.Add(new object[] { DateTime.Parse("8/4/2023"), "Team 01", "S", 10 });
            dt.Rows.Add(new object[] { DateTime.Parse("8/4/2023"), "Team 02", "M", 20 });
            dt.Rows.Add(new object[] { DateTime.Parse("8/4/2023"), "Team 03", "L", 30 });
            dt.Rows.Add(new object[] { DateTime.Parse("8/5/2023"), "Team 01", "M", 40 });
            dt.Rows.Add(new object[] { DateTime.Parse("8/5/2023"), "Team 02", "M", 50 });

            DateTime[] dates = dt.AsEnumerable().Select(x => x.Field<DateTime>("Date")).Distinct().OrderBy(x => x).ToArray();

            DataTable pivot = new DataTable();
            pivot.Columns.Add("TeamNo", typeof(string));
            pivot.Columns.Add("Size", typeof(string));
            foreach(DateTime date in dates)
            {
                pivot.Columns.Add(date.ToString("M/d/yyyy"));
            }

            var groups = dt.AsEnumerable().GroupBy(x => new { team = x.Field<string>("TeamNo"), size = x.Field<string>("Size")});

            foreach(var group in groups)
            {
                DataRow newRow = pivot.Rows.Add();
                newRow["TeamNo"] = group.Key.team;
                newRow["Size"] = group.Key.size;
                var rowDate = group.GroupBy(x => x.Field<DateTime>("Date"));
                foreach(var date in rowDate)
                {
                    newRow[date.Key.ToString("M/d/yyyy")] = date.Sum(x => x.Field<int>("Qty"));
                }
            }
        }

    }

 
}

字符串

相关问题