在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个等级?是的,我的不好,只是复制粘贴的最上面的答案,然后忘记删除它。现在更正。