组内按一定规则排序取第一名

chengangcsdn 2018-08-21 01:42:36
declare @table table(projectid int,FillTotal int,FillQty int,SendTotal int)
insert into @table
select 1,100,5,2 union all
select 1,200,0,5 union all
select 2,0,10,3 union all
select 2,0,20,6
-------------
要的结果是 projectid分组,取order by FillTotal desc,FillQty desc 第一名
结果集该是
1,200,0,5
2,0,20,6
...全文
172 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-08-21
  • 打赏
  • 举报
回复

select * 
from
(select * 
from
@table A
where not exists (select 1 from @table where A.projectid=projectid and filltotal>A.filltotal)) as A
where not exists (select 1 from @table where A.projectid=projectid and filltotal=A.filltotal and FillQty>A.FillQty)
二月十六 版主 2018-08-21
  • 打赏
  • 举报
回复
SELECT
projectid,
(
SELECT TOP 1
FillTotal
FROM
@table
WHERE
a.projectid = projectid
ORDER BY
FillTotal DESC,
FillQty DESC
) FillTotal,
(
SELECT TOP 1
FillQty
FROM
@table
WHERE
a.projectid = projectid
ORDER BY
FillTotal DESC,
FillQty DESC
) FillQty,
(
SELECT TOP 1
SendTotal
FROM
@table
WHERE
a.projectid = projectid
ORDER BY
FillTotal DESC,
FillQty DESC
) SendTotal
FROM
@table a
GROUP BY
projectid


chengangcsdn 2018-08-21
  • 打赏
  • 举报
回复
忘记了补充,要兼容SQL2000 不能用OVER
二月十六 版主 2018-08-21
  • 打赏
  • 举报
回复
楼主其实在说规则的时候已经也就写完了把语句,只是对这这个知识点欠缺
declare @table table(projectid int,FillTotal int,FillQty int,SendTotal int)
insert into @table
select 1,100,5,2 union all
select 1,200,0,5 union all
select 2,0,10,3 union all
select 2,0,20,6
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY --projectid分组
projectid
ORDER BY --order by FillTotal desc,FillQty desc
FillTotal DESC,
FillQty DESC
) rn
FROM
@table
) t
WHERE
rn = 1;


吉普赛的歌 版主 2018-08-21
  • 打赏
  • 举报
回复
SELECT 
projectid
,FillTotal
,FillQty
,SendTotal
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY projectid ORDER BY FillTotal desc,FillQty desc) AS rid
,*
FROM @table
) AS t
WHERE t.rid=1
/*
projectid FillTotal FillQty SendTotal
----------- ----------- ----------- -----------
1 200 0 5
2 0 20 6
*/

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧