当前位置:网站首页 > Haskell函数式编程 > 正文

pivot和unpivot函数用法(pivot_table函数)



可能会用到 PIVOT 的常见情况是:需要生成交叉表格报表以汇总数据。例如,假设需要在 AdventureWorks2008R2 示例数据库中查询 PurchaseOrderHeader 表以确定由某些特定雇员所下的采购订单数。以下查询提供了此报表(按供应商排序)。

 
  

以下为部分结果集。

VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

1492        2           5           4           4           4

1494        2           5           4           5           4

1496        2           4           4           5           5

1498        2           5           4           4           4

1500        3           4           4           5           4

将在 EmployeeID 列上透视此嵌套 select 语句返回的结果。

 
  

这意味着 EmployeeID 列返回的唯一值自行变成了最终结果集中的字段。因此,在透视子句中指定的每个 EmployeeID 号都有相应的一列:在本例中为雇员 164、198、223、231 和 233。PurchaseOrderID 列作为值列,将根据此列对最终输出中返回的列(称为分组列)进行分组。在本例中,通过 COUNT 函数聚合分组列。请注意,将显示一条警告消息,指出为每个雇员计算 COUNT 时未考虑显示在 PurchaseOrderID 列中的任何空值。

UNPIVOT 将与 PIVOT 执行几乎完全相反的操作,将列转换为行。假设以上示例中生成的表在数据库中存储为 pvt,并且您需要将列标识符 Emp1、Emp2、Emp3、Emp4 和 Emp5 旋转为对应于特定供应商的行值。这意味着必须标识另外两个列。包含要旋转的列值(Emp1、Emp2...)的列将被称为 Employee,将保存当前位于待旋转列下的值的列被称为 Orders。这些列分别对应于 Transact-SQL 定义中的 pivot_column 和 value_column。以下为该查询。

 
  

以下为部分结果集。

VendorID Employee Orders

---------- ---------- ------

1          Emp1       4

1          Emp2       3

1          Emp3       5

1          Emp4       4

1          Emp5       4

2          Emp1       4

2          Emp2       1

2          Emp3       5

2          Emp4       5

2          Emp5       5

...

请注意,UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 会执行一次聚合,从而将多个可能的行合并为输出中的单个行。而 UNPIVOT 不会重现原始表值表达式的结果,因为行已经被合并了。另外,UNPIVOT 的输入中的空值不会显示在输出中,而在执行 PIVOT 操作之前,输入中可能有原始的空值。

AdventureWorks2008R2 示例数据库中的 Sales.vSalesPersonSalesByFiscalYears 视图将使用 PIVOT 返回每个销售人员在每个会计年度的总销售额。若要在 SQL Server Management Studio 中编写视图脚本,请在“对象资源管理器”中,在“视图”文件夹下找到 AdventureWorks2008R2 数据库对应的视图。右键单击该视图名称,再选择“编写视图脚本为”。

到此这篇pivot和unpivot函数用法(pivot_table函数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • otfs调制(ofdm调制方式的优缺点)2026-03-16 23:18:07
  • 鸿蒙软件后缀格式(鸿蒙系统软件的后缀)2026-03-16 23:18:07
  • mysql窗口函数执行顺序(mysql窗口函数从哪个版本开始有)2026-03-16 23:18:07
  • 支付方式怎么设置(高德支付方式怎么设置)2026-03-16 23:18:07
  • ped文件怎么打开(ped文件格式转换)2026-03-16 23:18:07
  • 报文格式(报文格式错误怎么解决)2026-03-16 23:18:07
  • 3dtiles转换osgb(osgb格式导入3dmax)2026-03-16 23:18:07
  • pivot函数 excel(pivot函数最简单三个步骤)2026-03-16 23:18:07
  • 路由守卫有几种模式(路由守卫有几种模式图片)2026-03-16 23:18:07
  • sigmoid函数原理(sigmoid function)2026-03-16 23:18:07
  • 全屏图片