34,594
社区成员
发帖
与我相关
我的任务
分享
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)
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
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;
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
*/