ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7322|回复: 27

[求助] order by 求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-22 07:04 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
想按(车间,组别,收入)依次排序。但这句ORDER BY 不起作用,怎么修改,请看附件,谢谢!

  1. SELECT B.* FROM (SELECT 车间,组别,MAX(收入) AS 最高 FROM [明细$A:F] GROUP BY 车间,组别 order by 车间,组别,MAX(收入) desc)A,[明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别 AND A.最高=B.收入
复制代码


order by 求助.rar

10.07 KB, 下载次数: 37

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-22 07:11 | 显示全部楼层
附件忘记更新,这个才是,谢谢。

order by 求助.rar

10.11 KB, 下载次数: 51

TA的精华主题

TA的得分主题

发表于 2012-11-22 08:17 | 显示全部楼层
不起作用,好得勒,不报错就谢天谢地了

在子查询中,order by 语句只为 top 服务

TA的精华主题

TA的得分主题

发表于 2012-11-22 08:25 | 显示全部楼层
看你的语句貌似是查询各类最高的记录[code=sql]SELECT *
FROM [明细$A:F]
WHERE 收入 =
(SELECT MAX(收入) FROM [明细$A:F] GROUP BY 车间,组别)
ORDER BY 车间,组别,收入 DESC[/code]

TA的精华主题

TA的得分主题

发表于 2012-11-22 09:43 | 显示全部楼层
本帖最后由 wuxiang_123 于 2012-11-27 13:20 编辑

域聚合函数:
  1. SELECT * FROM [明细$A:F]
  2. WHERE 收入=DMAX("收入","明细$A:F","车间='"&车间&"' AND 组别='"&组别&"'")
  3. ORDER BY 车间,组别,收入
复制代码

子查询:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 收入=(SELECT MAX(收入) FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-IN谓词:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 收入 IN (SELECT MAX(收入) FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-TOP谓词:
  1. SELECT * FROM [明细$A:F]A WHERE 收入=(SELECT TOP 1 收入 FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别 ORDER BY B.收入 DESC)
  2. ORDER BY 车间,组别,收入
复制代码

子查询-NOT 运算符:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE NOT 收入 <ANY (SELECT MAX(收入) FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-ANY谓词:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 收入 =ANY (SELECT MAX(收入) FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-SOME谓词(与ANY同义):
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 收入 =SOME (SELECT MAX(收入) FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-ALL谓词:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 车间 AND 收入>=ALL (SELECT 收入 FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别)
  3. ORDER BY 车间,组别,收入
复制代码

子查询-EXISTS谓词:

  1. SELECT * FROM [明细$A:F]A
  2. WHERE EXISTS (SELECT 1 FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别 HAVING A.收入=MAX(B.收入))
  3. ORDER BY 车间,组别,收入
复制代码

子查询-NOT EXISTS:
  1. SELECT * FROM [明细$A:F]A
  2. WHERE 车间 AND NOT EXISTS (SELECT 1 FROM [明细$A:F]B WHERE A.车间=B.车间 AND A.组别=B.组别 HAVING A.收入<>MAX(B.收入))
  3. ORDER BY 车间,组别,收入
复制代码

多表查询:
  1. SELECT A.* FROM [明细$A:F]A,(SELECT 车间,组别, MAX(收入) AS 最大值 FROM [明细$A:F] GROUP BY 车间,组别)B
  2. WHERE A.车间=B.车间 AND A.组别=B.组别 AND A.收入=B.最大值
  3. ORDER BY A.车间,A.组别,A.收入
复制代码

JOIN联接-内部联接:
  1. SELECT A.* FROM [明细$A:F]A INNER JOIN (SELECT 车间,组别, MAX(收入) AS 最大值 FROM [明细$A:F] GROUP BY 车间,组别)B
  2. ON A.车间=B.车间 AND A.组别=B.组别 AND A.收入=B.最大值
  3. ORDER BY A.车间,A.组别,A.收入
复制代码

JOIN联接-左外部联接:
  1. SELECT A.* FROM [明细$A:F]A LEFT JOIN (SELECT 车间,组别, MAX(收入) AS 最大值 FROM [明细$A:F] GROUP BY 车间,组别)B
  2. ON A.车间=B.车间 AND A.组别=B.组别 AND A.收入=B.最大值
  3. WHERE B.车间 IS NOT NULL
  4. ORDER BY A.车间,A.组别,A.收入
复制代码

JOIN联接-右外部联接:
  1. SELECT B.* FROM (SELECT 车间,组别, MAX(收入) AS 最大值 FROM [明细$A:F] GROUP BY 车间,组别)A RIGHT JOIN [明细$A:F]B
  2. ON A.车间=B.车间 AND A.组别=B.组别 AND A.最大值=B.收入
  3. WHERE A.车间 IS NOT NULL
  4. ORDER BY B.车间,B.组别,B.收入
复制代码

联合查询-按下面语句补充其他车间和组别,不能适应车间和组别动态添加:
  1. SELECT * FROM (SELECT TOP 1 * FROM [明细$A:F] WHERE 车间='2E' AND 组别='A' ORDER BY 收入 DESC)
  2. UNION ALL ……
  3. SELECT * FROM (SELECT TOP 1 * FROM [明细$A:F] WHERE 车间='2W' AND 组别='A' ORDER BY 收入 DESC)
复制代码

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-22 11:07 | 显示全部楼层
作为SQL知识学习是可以象大师们一样用上述代码,但如果是实际工作者,则还是用微软现成的普通透视即可实现。

普通透视.rar

15 KB, 下载次数: 29

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-22 13:10 | 显示全部楼层
wuxiang_123 发表于 2012-11-22 09:43

最后三种方法最快。

TA的精华主题

TA的得分主题

发表于 2012-11-22 14:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wuxiang_123 发表于 2012-11-22 09:43

如果吴版当老师的话,这样深入浅出的讲解,是学生的福气,再讲讲各种方法的区别,那就更绝了

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-23 19:25 | 显示全部楼层
wuxiang_123 发表于 2012-11-22 09:43

就拿第10种方法而言,如果相同车间,相同组别,有多个人的收入是相等的,则不要全部提取出来,只要其中之一就可以了,我改成:下面怎么不能?
  1. SELECT A.* FROM [明细$A:F]A LEFT JOIN (SELECT 车间,组别, MAX(收入) AS 最大值 FROM [明细$A:F] GROUP BY 车间,组别)B ON A.车间=B.车间 AND A.组别=B.组别 AND A.收入=B.最大值 WHERE B.车间 IS NOT NULL ORDER BY A.车间,A.组别,A.收入+Rnd(A.收入)/10^8 Desc
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-23 19:53 | 显示全部楼层
请看附件。谢谢。

order by 求助1.rar

10.31 KB, 下载次数: 17

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-9 06:09 , Processed in 0.028182 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表