php - 在 Union 中结合 Distinct 和 TOP 1 | SQL 服务器 2012
问题描述
我有以下 SQL 查询:
SELECT DISTINCT LEFT (employeeidno, 4)deptcode
from employeemasterfile
ORDER BY deptcode ASC
产生一个DISTINCT
值D001
toD051
SELECT TOP 1 RIGHT (employeeidno, 7) empno
from employeemasterfile
ORDER BY empno DESC
产生一个值0000267
我在这里想要实现的是 to 的每个DISTINCT
值都D001
应该D051
产生它的TOP 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 将不起作用。
我可以就这个问题寻求您的帮助吗?
示例数据如下所示
D0010000001
D0010000002
D0010000003
D0010000004
D0010000005
D0010000006
D0010000007
D0010000008
D0010000009
D0010000010
D0010000011
D0010000012
D0010000013
D0010000014
D0010000015
D0010000016
D0020000001
D0020000002
D0020000003
D0020000004
D0020000005
D0020000006
D0020000007
D0020000008
D0020000009
D0020000010
D0020000011
D0020000012
D0020000013
D0020000014
D0020000015
D0020000016
D0020000017
D0020000018
D0020000019
依此类推,直到 D0520000001
解决方案
你可以使用 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
推荐阅读
- java - 当 n1 等于 n2 时,如何使我的代码返回 true?
- php - 如果收到数组和对象,如何在 jQuery 中解析来自 php 的数据
- arrays - 这个使用递归反转数组的函数有什么问题?(包括代码和结果)
- java - 第一次尝试连接时无法打开 JPA EntityManager
- angular - angular 10 - webviews 的替代品
- azure - 在 azure devops 中使用魅力报告
- xml - Go XML chardata prints empty line
- node.js - AWS Lambda SQS 函数中 JSON 输入错误的意外结束
- android - ML Kit Vision API 文本识别 - 如何检查瘦模型是否已下载
- kotlin - 如何从 kotlin 中的泛型中获取“this”