如何从前2个包ID中获取行而不是SQL Server中的所有行?
Ex:Sample_table
tranid packid referencenum
1 1 123456
2 1 654982
3 2 894652
4 3 684521
5 3 684651
6 4 987566
根据上面的示例表,如何获取下一个实例的包2(1和2)的行我再次需要3行和4行
有人可以帮我解决问题吗?
答案 0 :(得分:1)
如果我没有错过任何内容,请:
SELECT *
FROM PacksTable p
WHERE p.Id IN (1, 2)
只会为您提供表格中两个pack_id
的数据。
目前还不清楚你在寻找什么。您可以按pack_id
进行分组,然后获得前两个pack_id
,但是您想对分组referencenum
的分组pack_id
值做什么,即您将使用哪个汇总函数用于此列,Min
,Max
等?? ??。
换句话说:如果您正在寻找Top
最小pack_id
,即第一次使用1,2,则必须回答以下问题:使用什么聚合函数与相应的referencenum
值,
例如,您可以像这样使用MIN
:
SELECT TOP(2) p.packid, MIN(p.referencenum)
FROM PacksTable p
GROUP BY(p.packid)
ORDER BY p.packid
答案 1 :(得分:0)
请完成以下查询。
select * from sample_table group by packid;
答案 2 :(得分:0)
您可以使用与DENSE_RANK
功能相结合的变量来一次浏览两个packid:
create table #packing (tranid int,packid int,referencenum int)
insert into #packing values
(1,1,123456)
, (2,1,654982)
, (3,2,894652)
, (4,3,684521)
, (5,3,684651)
, (6,4,987566)
go
declare @i int=-1;
declare @j int=0;
while @@ROWCOUNT>0 begin
set @i+=2;
set @j+=2;
; with a as (
select *, dr=dense_rank()over(order by packid) from #packing
)
select tranid, packid, referencenum
from a
where dr between @i and @j;
end
go
drop table #packing
go
结果: