1

サンプル データが 1 つあり、ランクとレコードに基づいてデータを分割する必要があります。データは次の形式のようになります。

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、ランクが変わるはずですが、これについて提案できますか?

4

2 に答える 2

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
于 2013-01-10T13:38:29.210 に答える
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

たとえば、http://sqlfiddle.com/#!3/3747f/1を参照してください

于 2013-01-10T12:18:04.677 に答える