mySql 数据库表行列转换

本文介绍了一种使用SQL进行数据转换的方法,通过示例展示了如何将原始成绩数据按科目进行汇总,实现行列转换,便于进一步的数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*创建表格grade*/
crate table grade (
  username varchar(45) not null ,
  cource varchar(45) null ,
  score int null);
/*插入数据*/
insert into grade (`username`, `cource`, `score`) values ('admin', 'english', '80');
insert into grade (`username`, `cource`, `score`) values ('admin', 'math', '90');
insert into grade (`username`, `cource`, `score`) values ('maco', 'english', '85');
insert into grade (`username`, `cource`, `score`) values ('admin', 'chinese', '85');
insert into grade (`username`, `cource`, `score`) values ('maco', 'math', '70');
insert into grade (`username`, `cource`, `score`) values ('maco', 'chinese', '68'); 
select * from grade;
 
/*查询行列转换结果*/
select  username,
      sum(if(cource='chinese',score,0)) as  chinese,
      sum(if(cource='math',score,0)) as  math,
      sum(if(cource='english',score,0)) as  english from grade group by username;

### 实现VBA结合MySQL进行Excel数据行列转换的逻辑 在实现VBA结合MySQL对Excel数据进行行列转换时,可以分为以下几个部分来完成任务:读取Excel数据、执行行列转换、将转换后的数据插入到MySQL数据库中。以下是具体的实现方法和代码示例。 #### 1. 读取Excel数据 使用VBA读取Excel中的数据,并将其存储为二维数组或列形式。可以通过`Range.Value`属性获取单元格区域的数据。 ```vba Sub ReadExcelData() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim lastRow As Long, lastCol As Long lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column Dim excelData As Variant excelData = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value End Sub ``` 此代码段读取了工作中的所有数据,并将其存储在变量`excelData`中[^4]。 #### 2. 执行行列转换 通过遍历原始数据,将行变为列,列变为行。以下是一个简单的行列转换逻辑: ```vba Function TransposeData(excelData As Variant) As Variant Dim rowCount As Long, colCount As Long rowCount = UBound(excelData, 1) colCount = UBound(excelData, 2) Dim transposedData() As Variant ReDim transposedData(1 To colCount, 1 To rowCount) Dim i As Long, j As Long For i = 1 To rowCount For j = 1 To colCount transposedData(j, i) = excelData(i, j) Next j Next i TransposeData = transposedData End Function ``` 此函数接收一个二维数组作为输入,并返回一个新的二维数组,其中行列已互换[^5]。 #### 3. 将转换后的数据插入到MySQL数据库 为了将转换后的数据插入到MySQL数据库中,需要使用ADO(ActiveX Data Objects)库。首先,确保在VBA编辑器中启用“Microsoft ActiveX Data Objects Library”。 以下是连接MySQL并插入数据的代码示例: ```vba Sub InsertIntoMySQL(transposedData As Variant) Dim conn As Object Set conn = CreateObject("ADODB.Connection") Dim connectionString As String connectionString = "DRIVER={MySQL ODBC 8.0 Driver};" & _ "SERVER=your_server;" & _ "DATABASE=your_database;" & _ "UID=your_username;" & _ "PWD=your_password;" conn.Open connectionString Dim sqlQuery As String Dim rowCount As Long, colCount As Long rowCount = UBound(transposedData, 1) colCount = UBound(transposedData, 2) Dim i As Long, j As Long For i = 1 To rowCount sqlQuery = "INSERT INTO your_table (" For j = 1 To colCount - 1 sqlQuery = sqlQuery & "column" & j & ", " Next j sqlQuery = sqlQuery & "column" & colCount & ") VALUES (" For j = 1 To colCount - 1 sqlQuery = sqlQuery & "'" & Replace(transposedData(i, j), "'", "''") & "', " Next j sqlQuery = sqlQuery & "'" & Replace(transposedData(i, colCount), "'", "''") & "')" conn.Execute sqlQuery Next i conn.Close Set conn = Nothing End Sub ``` 此代码段实现了与MySQL数据库的连接,并将转换后的数据逐行插入到指定的中[^6]。 #### 4. 综合代码 将上述功能整合到一个完整的VBA宏中: ```vba Sub ExcelToMySQLTranspose() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim lastRow As Long, lastCol As Long lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column Dim excelData As Variant excelData = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value Dim transposedData As Variant transposedData = TransposeData(excelData) InsertIntoMySQL transposedData End Sub ``` 此宏实现了从读取Excel数据到行列转换再到插入MySQL数据库的完整流程[^7]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值