|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 xwscs 于 2013-2-5 23:41 编辑
楼上最后一个代码单独执行没有问题。
放在交叉表查询的时候,如果删掉group by 后的姓名='合计',姓名=班级&'小计',就出错
语句1:正确(香帅上个帖子的最后一段)
- SELECT 姓名,班级,SUM(得分) AS 总得分
- FROM (SELECT 姓名,班级,科目,得分
- FROM [成绩表$]
- UNION ALL
- SELECT 班级&'小计' AS 姓名,班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目,班级
- UNION ALL
- SELECT '合计' AS 姓名,null AS 班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目)
- GROUP BY 姓名,班级
- ORDER BY 姓名='合计' DESC ,班级,姓名=班级&'小计'
复制代码
语句2:出错,在语句1的基础上第一句和最后一句
- TRANSFORM SUM(得分) AS 得分1
- SELECT 姓名,班级,SUM(得分) AS 总得分
- FROM (SELECT 姓名,班级,科目,得分
- FROM [成绩表$]
- UNION ALL
- SELECT 班级&'小计' AS 姓名,班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目,班级
- UNION ALL
- SELECT '合计' AS 姓名,null AS 班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目)
- GROUP BY 姓名,班级
- ORDER BY 姓名='合计' DESC ,班级,姓名=班级&'小计'
- PIVOT 科目
复制代码
语句3:正确,语句2和语句3的区别倒数第三句 group by
- TRANSFORM SUM(得分) AS 得分1
- SELECT 姓名,班级,SUM(得分) AS 总得分
- FROM (SELECT 姓名,班级,科目,得分
- FROM [成绩表$]
- UNION ALL
- SELECT 班级&'小计' AS 姓名,班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目,班级
- UNION ALL
- SELECT '合计' AS 姓名,null AS 班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目)
- GROUP BY 姓名,班级,姓名='合计',姓名=班级&'小计'
- ORDER BY 姓名='合计' DESC ,班级,姓名=班级&'小计'
- PIVOT 科目
复制代码 请指教,为啥group by 后要加姓名='合计',姓名=班级&'小计'呢?
如果说ORDER BY出现的字段必须先在GROUP BY子句声明,那么语句1groupby 后面跟了两个字段,orderby 后面是三个,其中两个没有在groupby出现,也成功了.
语句4:正确,这句和第2句的区别在于pivot 后加了in,group by 后面没有姓名='合计',姓名=班级&'小计' 。
- TRANSFORM SUM(得分) AS 得分1
- SELECT 姓名,班级,SUM(得分) AS 总得分
- FROM (SELECT 姓名,班级,科目,得分
- FROM [成绩表$]
- UNION ALL
- SELECT 班级&'小计' AS 姓名,班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目,班级
- UNION ALL
- SELECT '合计' AS 姓名,null AS 班级,科目,AVG(得分)
- FROM [成绩表$]
- GROUP BY 科目)
- GROUP BY 姓名,班级
- ORDER BY 姓名='合计' DESC ,班级,姓名=班级&'小计'
- PIVOT 科目 in ('数学','语文','英语')
复制代码
不知道是不是transform 在group by +order by 有啥说法?
|
|