用sql写一个关于爆炸函数的行转列
时间: 2023-02-21 16:09:56 浏览: 75
SQL语言中可以使用PIVOT关键字实现行转列。下面是一个简单的例子:
```
WITH data AS (
SELECT 'A' AS item, 'apple' AS description, 10 AS quantity UNION ALL
SELECT 'B' AS item, 'banana' AS description, 20 AS quantity UNION ALL
SELECT 'C' AS item, 'cherry' AS description, 30 AS quantity
)
SELECT *
FROM data
PIVOT (SUM(quantity) FOR item IN ('A' AS A, 'B' AS B, 'C' AS C))
```
上面的代码假定了有一个名为data的表,其中包含item、description和quantity三个字段。使用PIVOT关键字可以将每一行的数据转换为列,其中item字段的值作为新列的列名,quantity字段的值作为新列的数值。在上面的例子中,我们使用SUM函数对每个item的quantity进行求和,得到的结果为:
```
A B C
--- -- --
10 20 30
```
相关问题
写一个行转列的sql
假有一个表格叫做 `MyTable`,包含两个列 `Name` 和 `Value`,其中 `Name` 是行的名称,`Value` 是该行的值。如果要将这个表格转换成列的形式,可以使用如下 SQL 语句:
```sql
SELECT Name, MAX(CASE WHEN ColumnNumber = 1 THEN Value ELSE NULL END) AS Column1,
MAX(CASE WHEN ColumnNumber = 2 THEN Value ELSE NULL END) AS Column2,
MAX(CASE WHEN ColumnNumber = 3 THEN Value ELSE NULL END) AS Column3,
...
FROM (
SELECT Name, Value, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Name) AS ColumnNumber
FROM MyTable
) AS T
GROUP BY Name
```
这个语句使用了 `ROW_NUMBER()` 函数来为每个行分配一个数字,然后使用 `CASE` 语句将每个行的值放到对应的列中。最后使用 `GROUP BY` 语句将每个行组合成一行。
sqlserver 行转列函数
以下是两种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
```