sqlserver 行转列函数
时间: 2024-04-08 17:25:37 浏览: 117
以下是两种SQL Server行转列的实现方式:
1. 使用CASE WHEN动态行转列:
```sql
declare @sql varchar(4000)
set @sql = 'select NAME'
select @sql = @sql + ',sum(case COURSE when '''+COURSE+''' then SCORE end) ['+COURSE+']'
from (select distinct COURSE from STUDENT ) as a
order by COURSE
select @sql = @sql+' from STUDENT group by NAME'
exec(@sql)
```
2. 使用内置函数PIVOT:
```sql
SELECT * FROM student PIVOT (SUM(score) FOR course IN (A,B,C,D,E,F,G,H,I) ) as t
```
相关问题
sql动态行转列函数
SQL中的动态行转列函数主要是用来将数据从行结构转换为列结构,这种操作常用于聚合查询或者需要对表中的某一列进行分组计算。其中一些常见的动态行转列函数有:
1. **PIVOT** (在某些数据库系统如SQL Server、Oracle等):这是一种特殊的查询技术,它允许你在一张表上“旋转”数据,将一行的数据转换成多行,每一行对应原始数据的一列值。
例如:
```sql
SELECT * FROM sales_data
PIVOT (
SUM(sales_amount)
FOR product_name IN ('Product A', 'Product B', 'Product C')
);
```
2. **UNNEST** 或 **EXplode** (在PostgreSQL中):这个函数可以将数组或集合类型的字段展开为单个元素的一行一列。
```sql
SELECT unnest(product_list) as product, sales_amount
FROM sales;
```
3. **CROSS APPLY** (在SQL Server中):虽然不是严格意义上的行转列,但可用于类似的效果,通过与一个外部表联接,可以在临时结果集中生成新列。
4. **CASE WHEN...ELSE** 结构:在标准SQL中,你可以使用CASE表达式结合GROUP BY来模拟部分行转列的功能,不过这相对复杂些。
无论哪种函数,它们的主要目标都是为了处理表格在展示或分析数据时,行列之间的灵活性。
SQL SERVER 行转列
SQL Server提供了内置函数PIVOT来实现行转列的功能。下面是使用PIVOT函数进行行转列的示例:
```sql
SELECT *
FROM (
SELECT [Category], [Value]
FROM YourTable
) AS SourceTable
PIVOT (
MAX([Value])
FOR [Category] IN ([Category1], [Category2], [Category3])
) AS PivotTable;
```
在上面的示例中,我们首先从源表中选择需要转换的列([Category]和[Value]),然后使用PIVOT函数将[Category]列的值作为新表的列名,[Value]列的值作为新表的值。最后,我们使用MAX函数对[Value]列进行聚合操作。
请注意,[Category1]、[Category2]和[Category3]是示例中的列名,你需要根据实际情况替换为你的列名。
阅读全文