我有一个示例数据,我需要根据排名和记录基础拆分数据,数据看起来如下格式。
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
是标题,PT
是预告片,在将数据从登台表格式化到最终表时,我需要根据标题和详细信息基础以及排名数来分割数据。
输出应如下所示:
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
记录触及等级应该改变,任何人都可以建议吗?
答案 0 :(得分:1)
我认为这会为你做到
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
答案 1 :(得分:1)
这会花费相同或更少的时间来执行吗?
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