写一段SQL代码:将一行数据转换为一列
时间: 2023-09-20 20:03:01 浏览: 65
假设有一张表名为table,其中有三列A、B、C,且只有一行数据,如下所示:
| A | B | C |
| --- | --- | --- |
| 1 | 2 | 3 |
我们可以使用UNPIVOT操作将这一行数据转换为一列,代码如下:
```
SELECT col_value
FROM
(SELECT A, B, C
FROM table) p
UNPIVOT
(col_value FOR col_name IN
(A, B, C)
) unpvt;
```
执行结果为:
| col_value |
| --------- |
| 1 |
| 2 |
| 3 |
相关问题
写一段T-SQL语句用来实现行转列
您可以使用以下 T-SQL 语句来实现行转列:
```
WITH cte AS (
SELECT column1, column2, ROW_NUMBER() OVER (ORDER BY column1) as row_num
FROM your_table
)
SELECT
MAX(CASE WHEN row_num = 1 THEN column1 END) AS column1_1,
MAX(CASE WHEN row_num = 1 THEN column2 END) AS column2_1,
MAX(CASE WHEN row_num = 2 THEN column1 END) AS column1_2,
MAX(CASE WHEN row_num = 2 THEN column2 END) AS column2_2,
...
FROM cte
GROUP BY (row_num - 1) / number_of_columns
```
其中,`your_table` 表示要转换的表,`column1` 和 `column2` 表示要转换的列,`number_of_columns` 表示每组要转换的列数。这段代码使用了 CTE(递归查询表达式)和 `CASE` 语句来实现行转列。
java中使用SXSSFWorkbook 导出excel,根据SQL返回list,数据要求行列转换,第n行数据变成第n列,给出示例代码
以下是一个基于 Java 和 Apache POI 的示例代码,使用 SXSSFWorkbook 将 SQL 查询结果转换为行列互换的 Excel 表格:
```java
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
public class ExportToExcel {
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
// 连接数据库
String jdbcUrl = "jdbc:mysql://localhost:3306/myDatabase";
String username = "myUsername";
String password = "myPassword";
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
// 执行 SQL 查询
String sql = "SELECT Column1, Column2, Column3 FROM myTable";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
// 将查询结果转换为行列互换的列表
List<Map<String, Object>> dataList = new ArrayList<>();
while (resultSet.next()) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("Column1", resultSet.getString("Column1"));
dataMap.put("Column2", resultSet.getString("Column2"));
dataMap.put("Column3", resultSet.getString("Column3"));
dataList.add(dataMap);
}
// 创建 Excel 工作簿并设置表头
SXSSFWorkbook workbook = new SXSSFWorkbook();
Row headerRow = workbook.createSheet("Sheet1").createRow(0);
for (int i = 0; i < dataList.size(); i++) {
Cell headerCell = headerRow.createCell(i);
headerCell.setCellValue("Row" + (i + 1));
}
// 将数据写入 Excel 表格
int rowNum = 1;
for (String columnName : dataList.get(0).keySet()) {
Row row = workbook.getSheet("Sheet1").createRow(rowNum++);
int cellNum = 0;
for (Map<String, Object> dataMap : dataList) {
Cell cell = row.createCell(cellNum++);
cell.setCellValue(dataMap.get(columnName).toString());
}
}
// 将 Excel 表格保存到文件
FileOutputStream outputStream = new FileOutputStream("output.xlsx");
workbook.write(outputStream);
workbook.close();
}
}
```
这段代码中使用了 Apache POI 库来操作 Excel 表格。在使用之前需要先下载并添加到项目依赖中。此外,需要根据实际情况修改数据库连接信息和 SQL 查询语句。这段代码将 SQL 查询结果转换为行列互换的列表,然后根据列表中的数据写入 Excel 表格。
阅读全文