用c#实现将MySQL中数据竖表转横表 id name subject score 1 小红 英语 32 2 小红 数学 28 3 小绿 英语 55 4 小绿 数学 22 5 小绿 语文 99
时间: 2024-11-15 12:20:43 浏览: 9
在C#中,你可以通过LINQ查询和自连接(self join)来将MySQL数据库中的竖表数据转换成横表,假设你已经有了一个名为`Students`的数据表,结构类似这样:
```csharp
using System;
using System.Data.SqlClient;
using System.Linq;
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Subject { get; set; }
public int Score { get; set; }
}
public static void Main()
{
// 连接到MySQL数据库
string connectionString = "your_mysql_connection_string";
using (var connection = new SqlConnection(connectionString))
{
var query = @"SELECT a.Id, a.Name, a.Subject, a.Score
FROM Students a
JOIN Students b ON a.Id = b.Id AND a.Subject = '英语'
WHERE a.Subject = '数学'";
connection.Open();
var result = connection.Query<Student>(query).ToList();
// 转换数据格式,将小红的数学成绩单独列出来
var horizontalData = result.GroupBy(s => s.Id)
.Select(g => new {
g.Key,
Name = g.First().Name,
EnglishScore = g.FirstOrDefault(s => s.Subject == "英语").Score,
MathScore = g.FirstOrDefault(s => s.Subject == "数学")?.Score ?? 0
});
// 打印结果
foreach (var item in horizontalData)
{
Console.WriteLine($"ID: {item.Id}, Name: {item.Name}, English Score: {item.EnglishScore}, Math Score: {item.MathScore}");
}
}
}
```
在这个示例中,我们首先执行了一个查询,获取每个学生的小红的英语和数学成绩。然后,我们使用`GroupBy`对结果按ID分组,并选择出特定的信息(名称、英语分数和数学分数)。如果某个学生的数学成绩不存在,则设置为默认值(如0)。
阅读全文