SQL Server多列表数据透视方法
在多种情况下,将表转换为其转置形式都非常有用。本文重点介绍如何在Microsoft SQL Server中转置具有多个列(A、B等)的表。
使用UNPIVOT和PIVOT进行数据透视
要转置表,您可以结合使用UNPIVOT和PIVOT函数:
示例如下:
<code class="language-sql">select * from ( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv;</code>
针对SQL Server 2008及以上版本的CROSS APPLY和VALUES方法
对于SQL Server 2008及以上版本,您还可以使用CROSS APPLY与VALUES组合来解开数据:
<code class="language-sql">select * from ( select day, col, value from yourtable cross apply ( values ('A', ACalls),('B', BCalls) ) c (col, value) ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv;</code>
应用于您的查询
如果您想转置当前查询的结果,可以使用类似的方法:
<code class="language-sql">select * from ( select LEFT(datename(dw,datetime),3) as DateWeek, col, value from DataTable cross apply ( values ('A', ACalls), ('B', BCalls) ) c (col, value) ) src pivot ( sum(value) for dateweek in (Mon, Tue, Wed, Thu, Fri) ) piv;</code>
这会将ACalls和BCalls列转置为行,并为每周的每一天(Mon、Tue等)创建列标题。
以上是如何在 SQL Server 中转置具有多列的表?的详细内容。更多信息请关注PHP中文网其他相关文章!