|
transform语法:
transform 值字段
SELECT 行字段1,…,行字段X FROM 表
GROUP BY 分组依据
PIVOT 列字段
问题一:
对值字段使用聚合函数不是必须的,当值字段作为GROUP BY子句或列字段时,可以不使用聚合函数,否则需要使用聚合函数来确保值字段根据GROUP BY子句和列字段在生成的转置表中记录唯一。
故:
transform 学生 select 班级 from [班级干部表$] group by 班级 pivot 职务
报错,而
transform 学生 select 班级 from [班级干部表$] group by 班级,学生 pivot 职务
可以运行。
问题2:
【+运算符】:
1:作为四则运算符中加号,进行加法运算。
2:作为文本连接符,作用等同于“&”
数据源中,【班级】和【学生】字段均为文本数据类型,故【+】在此处作为文本连接符,相当于“&”。
【select max(班级) as 班级 from [班级干部表$] group by 班级+学生】
此部分的意思是:根据班级+学生构成一个新字段,然后根据这个新字段对【班级干部表】的记录进行分组,并取每个分组下的班级最大值。
【select max(班级) as 班级 from [班级干部表$] group by 班级+学生】与【select max(班级) as 班级 from [班级干部表$] group by 班级,学生】,
通常两者返回的结果是相同的,但表达的意义不同。当存在【班级】与【学生】记录不同,但【班级+学生】记录相同时,【班级+学生】与【班级,学生】作为分组依据,其聚合函数返回的结果将不同。
让我们在数据源中增加以下两条记录,然后对比两个语句的返回结果,就可以清晰看到区别。
数据源:
GROUP BY 班级+学生:
GROUP BY 班级,学生:
就此部分来说,建议使用【group by 班级,学生】而非【group by 班级+学生】,一是为了避免上面所说的特殊情况(当然楼主的数据源是不存在的),二是为了提速。当“+”充当“&”时,同样地,会降低语句运行效率,在数据大时对比更明显。
关于MAX和FIRST。在这里,由于GROUP BY字段分组后的记录已经是相同或唯一,故使用MAX、MIN、FIRST、LAST其结果都是一样的。任选一即可。
从这个语句来说,建议使用:
transform 学生 select 班级 from [班级干部表$] group by 班级,学生 pivot 职务
|
评分
-
3
查看全部评分
-
|