最近工作中总是要跟access数据库打交道,还需要写一些VBA,很烦的说!
不过发现有个知识点是我以前不知道的,那就是transform....pivot,补充如下:
微软官方对transform…pivot语句的说明:
TRANSFORM 语句 (Microsoft Access SQL)
创建交叉表查询。
语法
TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN (value1[, value2[, ...]])]
TRANSFORM 语句包含以下部分:
部分 说明
aggfunction 对所选数据进行计算的 SQL 聚合函数。
selectstatement SELECT 语句。
pivotfield 希望用于创建查询结果集中列标题的字段或表达式。
value1、value2 用于创建列标题的固定值。
说明
使用交叉表查询汇总数据时,将从作为列标题的指定字段或表达式中选择值,以便能够以一种比使用选择查询更紧凑的方式来查看数据。
TRANSFORM 是可选的,但如果包括它,则应为 SQL 字符串中的第一个语句。它在指定作为行标题的字段的 SELECT 语句之前,在指定行分组方法的 GROUP BY 子句之前。您也可以包含其他子句(例如。指定其他选择或排序条件的 WHERE)。还可以在交叉表查询中使用子查询作为谓词,特别是在 WHERE 子句中。
pivotfield 中返回的值作为查询结果集中的列标题。例如,在交叉表查询中如果依据月销售量来透视销售数据,将会创建 12 个列。可以约束 pivotfield 以便从可选 IN 子句中所列出的固定值(value1,value2)内选择标题。也可以包含固定值用于没有数据来创建其他列的情况。
实际使用实例:
不过发现有个知识点是我以前不知道的,那就是transform....pivot,补充如下:
微软官方对transform…pivot语句的说明:
TRANSFORM 语句 (Microsoft Access SQL)
创建交叉表查询。
语法
TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN (value1[, value2[, ...]])]
TRANSFORM 语句包含以下部分:
部分 说明
aggfunction 对所选数据进行计算的 SQL 聚合函数。
selectstatement SELECT 语句。
pivotfield 希望用于创建查询结果集中列标题的字段或表达式。
value1、value2 用于创建列标题的固定值。
说明
使用交叉表查询汇总数据时,将从作为列标题的指定字段或表达式中选择值,以便能够以一种比使用选择查询更紧凑的方式来查看数据。
TRANSFORM 是可选的,但如果包括它,则应为 SQL 字符串中的第一个语句。它在指定作为行标题的字段的 SELECT 语句之前,在指定行分组方法的 GROUP BY 子句之前。您也可以包含其他子句(例如。指定其他选择或排序条件的 WHERE)。还可以在交叉表查询中使用子查询作为谓词,特别是在 WHERE 子句中。
pivotfield 中返回的值作为查询结果集中的列标题。例如,在交叉表查询中如果依据月销售量来透视销售数据,将会创建 12 个列。可以约束 pivotfield 以便从可选 IN 子句中所列出的固定值(value1,value2)内选择标题。也可以包含固定值用于没有数据来创建其他列的情况。
实际使用实例:
表结构如下:
如果需要按照severity的不同类别来统计每个状态的记录的条数,怎么做呢?
比如有一些记录ID为1,3,5的serverity为blocker,状态为open,而另外一些为minor或者其他的状态,我需要统计每个状态的记录总共多少条。
语句可以这么写:
transform count(defect.defectID) as defectNumber
select defect.status,count(defect.defectID) as total
from defect
where 条件
GROUP by defect.status
PIVOT defect.severity
查询出来的结果为: