为了账号安全,请及时绑定邮箱和手机立即绑定

结合 Distinct 和 TOP 1 in Union | SQL 服务器 2012

结合 Distinct 和 TOP 1 in Union | SQL 服务器 2012

PHP
拉风的咖菲猫 2021-11-05 10:55:04
我有以下 SQL 查询:SELECT DISTINCT LEFT (employeeidno, 4)deptcode from employeemasterfile ORDER BY deptcode ASC产生一个DISTINCT值D001toD051SELECT TOP 1 RIGHT (employeeidno, 7) empno from employeemasterfile  ORDER BY empno DESC 产生一个值 0000267我在这里试图实现的是to 的每个DISTINCT值都应该产生它的值。D001D051TOP 1这就是我正在努力实现的目标。deptcode :D001; empno: 0000016deptcode :D002; empno: 0000024deptcode :D004; empno: 0000029deptcode :D005; empno: 0000020deptcode :D006; empno: 0000056deptcode :D007; empno: 0000164deptcode 将显示所有唯一的 D001-D007,empno 将显示每个唯一的 deptcode 的 TOP1。select deptcode, empno from(SELECT TOP 1 RIGHT (employeeidno, 7) empno from employeemasterfile  ORDER BY empno DESCUNIONSELECT DISTINCT LEFT (employeeidno, 4)deptcode from employeemasterfile ORDER BY deptcode ASC) resultsORDER BY deptcode不幸的是我不能这样做,因为如果我要添加一个新参数,UNION 将不起作用。我可以请你帮忙解决这个问题吗?
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

你可以这样做GROUP BY LEFT(employeeidno, 4):


SELECT 

  LEFT(employeeidno, 4) deptcode,

  MAX(RIGHT(employeeidno, 7)) empno

FROM employeemasterfile

GROUP BY LEFT(employeeidno, 4)

ORDER BY LEFT(employeeidno, 4)


查看完整回答
反对 回复 2021-11-05
?
慕神8447489

TA贡献1780条经验 获得超1个赞

你可以使用 row_number()


select deptcode,empno from

 ( select LEFT (employeeidno, 4) deptcode,

          RIGHT (employeeidno, 7) empno,

  row_number()over(partition by LEFT (employeeidno, 4) ordere by RIGHT (employeeidno, 7) desc)

 from employeemasterfile

) a where a.rn=1


查看完整回答
反对 回复 2021-11-05
?
偶然的你

TA贡献1841条经验 获得超3个赞

据我了解,聚合应该这样做。


SELECT left(employeeidno, 4) deptcode,

       max(right(employeeidno, 7)) empno

       FROM employeemasterfile

       GROUP BY left(employeeidno, 4)

       ORDER BY left(employeeidno, 4);

编辑:


我会试着解释一下:


您可以想象GROUP BY left(employeeidno, 4)将记录集划分为子集。在每个子集中left(employeeidno, 4),即deptno是相同的,并且没有两个子集具有相同的deptno。现在在每个子集中max(right(employeeidno, 7))取最大值right(employeeidno, 7)即最大值empno。(ORDER BY empno DESC将结果限制为一行TOP 1也会使您获得最大值。)然后通过获取deptno每个子集(即每个子集deptno)的 和最大值 来产生最终结果empno。


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信