我需要创建一个SQL Server查询,该查询将“常见”顺序数据组合在一起,并为该组分配唯一ID。在下面的示例中,我定期从政策中提取。
create table #Temp2 (Policy_Id int, WDL_Date int, Amount decimal(9,2));
insert into #Temp2 values(1001, 19881028, 190.00);
insert into #Temp2 values(1001, 19881129, 190.00);
insert into #Temp2 values(1001, 19881229, 494.89);
insert into #Temp2 values(1001, 19890130, 494.89);
insert into #Temp2 values(1001, 19890227, 494.89);
insert into #Temp2 values(1001, 19890330, 494.89);
insert into #Temp2 values(1001, 19890530, 525.00);
insert into #Temp2 values(1001, 19890629, 525.00);
insert into #Temp2 values(1001, 19890728, 525.00);
insert into #Temp2 values(1001, 19890830, 525.00);
insert into #Temp2 values(1001, 19930723, 51.00);
insert into #Temp2 values(1001, 19931213, 190.00);
insert into #Temp2 values(1001, 19940311, 190.00);
insert into #Temp2 values(1001, 19940613, 190.00);
insert into #Temp2 values(1002, 19881028, 50.00);
insert into #Temp2 values(1002, 19881129, 50.00);
insert into #Temp2 values(1002, 19881229, 60.00);
insert into #Temp2 values(1002, 19890130, 100.00);
insert into #Temp2 values(1002, 19890227, 100.00);
我想创建下面的输出,其中列ID由查询填充。请注意,金额按日期顺序排序,该日期顺序应确定字段Id中的值。
Policy_Id WDL_Date Amount Id
--------- -------- ------ --
1001 19881028 190.00 1
1001 19881129 190.00 1
1001 19881229 494.89 2
1001 19890130 494.89 2
1001 19890227 494.89 2
1001 19890330 494.89 2
1001 19890530 525.00 3
1001 19890629 525.00 3
1001 19890728 525.00 3
1001 19890830 525.00 3
1001 19930723 51.00 4
1001 19931213 190.00 5
1001 19940311 190.00 5
1001 19940613 190.00 5
1002 19881028 50.00 1
1002 19881129 50.00 1
1002 19881229 60.00 2
1002 19890130 100.00 3
1002 19890227 100.00 3
我尝试使用DENSE_RANK()来填充Id,但我遇到的问题是190.00的2个单独分组数量(Policy_Id = 1001的前2和下3个记录)需要保持独立并且DENSE_RANK()声明将190.00的两组视为一组。我还需要在每个新策略中重新启动分组。这是我的代码,它不会产生所需的输出。
select *,
DENSE_RANK() over (order by policy_id, amount) as Id
from
#Temp2
order by policy_id, WDL_Date;
任何人都可以就此提供任何指导吗?
答案 0 :(得分:0)
将所有190.00组合在一起你需要做这样的事情......
SELECT *,
DENSE_RANK() OVER (PARTITION BY policy_id ORDER BY amount) as Id
FROM
#Temp2
ORDER BY policy_id, ID;
您所需的输出有一些差异,因为当您在排名功能中按金额订购时,51.00应该是第一个值而不是190.00