在SQL Server中,我们经常会遇到需要将行数据转为列显示的需求,这种情况通常发生在我们需要对数据进行透视或者报告的时候,在SQL Server中,我们可以使用PIVOT和UNPIVOT操作来实现这个需求。
1. PIVOT操作
PIVOT操作是将行数据转换为列的操作,它可以根据一个或多个列的值将其他列的值旋转为新的列,PIVOT操作的基本语法如下:
SELECT * FROM (SELECT column1, column2, ..., columnN FROM table_name) AS SourceTable PIVOT (AggregateFunction(column1) FOR column2 IN (value1, value2, ..., valueN))
在这个语法中,SourceTable
是源表,column1, column2, ..., columnN
是源表中的列,table_name
是源表的名称,AggregateFunction
是聚合函数,如SUM、AVG、COUNT等,column2
是用于旋转的列,value1, value2, ..., valueN
是column2
的可能值。
我们有一个销售表(Sales),包含以下数据:
Product | Qty | Price |
A | 10 | 100 |
B | 20 | 200 |
C | 30 | 300 |
如果我们想要将产品名(Product)作为列,数量(Qty)和价格(Price)作为值,我们可以使用以下SQL语句:
SELECT * FROM (SELECT Product, Qty, Price FROM Sales) AS SourceTable PIVOT (SUM(Qty) FOR Product IN (A, B, C))
执行上述SQL语句后,我们将得到以下结果:
A | B | C |
10 | 20 | 30 |
100 | 200 | 300 |
2. UNPIVOT操作
UNPIVOT操作是将列数据转换为行的操作,它可以根据一个或多个列的值将其他列的值旋转为新的行,UNPIVOT操作的基本语法如下:
SELECT * FROM (SELECT column1, column2, ..., columnN FROM table_name) AS SourceTable UNPIVOT (column_name FOR column_value IN (value1, value2, ..., valueN))
在这个语法中,SourceTable
是源表,column1, column2, ..., columnN
是源表中的列,table_name
是源表的名称,column_name
是新生成的列的名称,column_value
是用于旋转的列的值,value1, value2, ..., valueN
是column_value
的可能值。
我们有一个销售表(Sales),包含以下数据:
Product | Qty | Price |
A | 10 | 100 |
B | 20 | 200 |
C | 30 | 300 |
如果我们想要将产品名(Product)作为行,数量(Qty)和价格(Price)作为值,我们可以使用以下SQL语句:
SELECT * FROM (SELECT Product, Qty, Price FROM Sales) AS SourceTable UNPIVOT (Qty FOR Product IN (A, B, C), Price FOR Product IN (A, B, C))
执行上述SQL语句后,我们将得到以下结果:
Product | Qty | Price |
A | 10 | 100 |
B | 20 | 200 |
C | 30 | 300 |
| NULL | NULL| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/510274.html