猿问

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

我有以下 SQL 查询:


SELECT DISTINCT LEFT (employeeidno, 4)deptcode 

from employeemasterfile 

ORDER BY deptcode ASC

产生一个DISTINCT值D001toD051


SELECT TOP 1 RIGHT (employeeidno, 7) empno 

from employeemasterfile  

ORDER BY empno DESC 

产生一个值 0000267


我在这里试图实现的是to 的每个DISTINCT值都应该产生它的值。D001D051TOP 1


这就是我正在努力实现的目标。


deptcode :D001; empno: 0000016


deptcode :D002; empno: 0000024


deptcode :D004; empno: 0000029


deptcode :D005; empno: 0000020


deptcode :D006; empno: 0000056


deptcode :D007; empno: 0000164

deptcode 将显示所有唯一的 D001-D007,empno 将显示每个唯一的 deptcode 的 TOP1。


select deptcode, empno 

from

(

SELECT TOP 1 RIGHT (employeeidno, 7) empno from employeemasterfile  ORDER BY empno DESC

UNION

SELECT DISTINCT LEFT (employeeidno, 4)deptcode from employeemasterfile ORDER BY deptcode ASC

) results

ORDER BY deptcode

不幸的是我不能这样做,因为如果我要添加一个新参数,UNION 将不起作用。


我可以请你帮忙解决这个问题吗?


拉风的咖菲猫
浏览 169回答 3
3回答

30秒到达战场

你可以这样做GROUP BY LEFT(employeeidno, 4):SELECT   LEFT(employeeidno, 4) deptcode,  MAX(RIGHT(employeeidno, 7)) empnoFROM employeemasterfileGROUP BY LEFT(employeeidno, 4)ORDER BY LEFT(employeeidno, 4)

慕神8447489

你可以使用 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

偶然的你

据我了解,聚合应该这样做。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。
随时随地看视频慕课网APP
我要回答