在SQLServer2005中,如何基于行和秩拆分数据?

在SQLServer2005中,如何基于行和秩拆分数据?,sql,sql-server-2005,Sql,Sql Server 2005,我有一个样本数据,我需要根据排名和记录划分数据,数据格式如下所示 Rank Rec_Type Rec Load_Dt -------------------------------------- 1 PH XXXXXXXXXXXXXXXXX 2012-12-23 2 DE YYYYYYYYYYYYYYYYYYY 2012-12-23 3 DE YYYYYYYYYYYYYYYYYYY 2012-12-23 4 DE YYYYYYYYYYYYYYYYYYY 2

我有一个样本数据,我需要根据排名和记录划分数据,数据格式如下所示

Rank    Rec_Type    Rec Load_Dt
--------------------------------------
1   PH  XXXXXXXXXXXXXXXXX   2012-12-23
2   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
3   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
4   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
5   CD  YYYYYYYYYYYYYYYYYYY 2012-12-23
6   PT  XXXXXXXXXXXXXXXXX   2012-12-23
7   PH  XXXXXXXXXXXXXXXXX   2012-12-23
8   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
9   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
10  PT  XXXXXXXXXXXXXXXXX   2012-12-23
PH是header,PT是trail,当将数据从staging表保护到final表时,我需要根据header和detail以及rank num分割数据

输出应如下所示:

Rank    RankNum Rec_Type    Rec Load_Dt
------------------------------------------
1   1   PH  XXXXXXXXXXXXXXXXX   2012-12-23
1   2   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
1   3   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
1   4   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
1   5   CD  YYYYYYYYYYYYYYYYYYY 2012-12-23
1   6   PT  XXXXXXXXXXXXXXXXX   2012-12-23
2   7   PH  XXXXXXXXXXXXXXXXX   2012-12-23
2   8   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
2   9   DE  YYYYYYYYYYYYYYYYYYY 2012-12-23
2   10  PT  XXXXXXXXXXXXXXXXX   2012-12-23

一旦PT记录涉及到排名应该改变,有人能对此提出建议吗?

我想这会对您有所帮助

SELECT
    SUM(CASE WHEN B.Rank IS NULL THEN 0 ELSE 1 END) + 1 Rank,
    A.Rank RankNum,
    A.Rec_Type,
    A.Rec,
    A.Load_Dt
FROM
    MyTable A
    LEFT JOIN MyTable B ON B.Rec_Type = 'PT' AND B.Rank < A.Rank
GROUP BY
    A.Rank,
    A.Rec_Type,
    A.Rec,
    A.Load_Dt

例如,请参见执行此操作所需的时间是否相同或更少

SELECT
  Rank = (SELECT COUNT(*) FROM MyTable WHERE Rank<=A.Rank AND Rec_Type = 'PH')  ,
  A.Rank RankNum,
  A.Rec_Type,
  A.Rec,
  A.Load_Dt
FROM
  MyTable A

为什么排名不是第十记录的第三名?或者总是有2个等级?是的,我的不好,只是复制粘贴的最上面的答案,然后忘记删除它。现在更正。