0

ステータスのリストで「最大」値を返そうとしています。ただし、アルファベット順ではなく、自分のランキングによって最大値が返されるように、文字列値に並べ替え値を割り当てたいと思います。

これが私のコードです:

    select x.wbs1, x.wbs2, x.wbs3, x.custstatus
    from (
          select wbs1,wbs2,wbs3,custstatus=MAX(custstatus)
          from Projects_CRStatus
          where custsentdate >= 'June 1, 2001' AND custsentdate <= 'June 30, 2013'
          AND CustStatus IN ('RECEIVED AT VENDOR', 'CONFIRMATION SENT',
          'IC PENDING','CONFIRMATION RECEIVED','CANCELLED')
          group by wbs1,wbs2,wbs3 ) x
    inner join (
          select wbs1,wbs2,wbs3,custsentdate=max(custsentdate)
          from Projects_CRStatus
          group by wbs1,wbs2,wbs3) y
    on (x.wbs1=y.wbs1 and x.wbs2=y.wbs2 and x.wbs3=y.wbs3)

    ORDER BY CustEnrollmentID

私がやりたいのは、CustStatus の値をランク付けして、CustStatus の上位のアルファベット順の結果を返すのではなく、この順序で最も高度なステータスを取得することです。

  1. 「ベンダーで受け取りました」
  2. 「確認を送信しました」
  3. 「IC保留中」
  4. 「確認を受け取りました」
  5. 'キャンセル'
4

2 に答える 2

1

rankという言葉を使用していますが、クエリ結果の順序付け方法について本当に質問していると思います。その場合、句でCASE式を使用できます。ORDER BY

ORDER BY CASE WHEN CustStatus = 'RECEIVED AT VENDOR' then 1
              WHEN CustStatus = 'CONFIRMATION SENT' then 2
              WHEN CustStatus = 'IC PENDING' then 3
              WHEN CustStatus = 'CONFIRMATION RECEIVED' then 4
              WHEN CustStatus = 'CANCELLED' then 5
              ELSE 6
         END, CustEnrollmentID

CASE 式の最後のエントリ (ELSE 条件) は、安全のためのものです。

更新:その後のコメントに基づいて、ROW_NUMBER関数を使用して「トップステータス」を返すクエリを次に示します。

select wbs1, wbs2, wbs3, custstatus

from (
   select x.wbs1, x.wbs2, x.wbs3, x.custstatus,
      ROW_NUMBER () OVER(PARTITION BY x.wbs1, x.wbs2, x.wbs3 
                      ORDER BY CASE
                      WHEN x.CustStatus = 'RECEIVED AT VENDOR' then 1
                      WHEN x.CustStatus = 'CONFIRMATION SENT' then 2
                      WHEN x.CustStatus = 'IC PENDING' then 3
                      WHEN x.CustStatus = 'CONFIRMATION RECEIVED' then 4
                      WHEN x.CustStatus = 'CANCELLED' then 5
                      ELSE 6 END) as rn
   from (
      select wbs1,wbs2,wbs3,custstatus=MAX(custstatus)
      from Projects_CRStatus
      where custsentdate >= 'June 1, 2001' 
        AND custsentdate <= 'June 30, 2013'
        AND CustStatus IN ('RECEIVED AT VENDOR', 'CONFIRMATION SENT'
            ,'IC PENDING','CONFIRMATION RECEIVED','CANCELLED')
        group by wbs1,wbs2,wbs3 ) x
   inner join (
      select wbs1,wbs2,wbs3,custsentdate=max(custsentdate)
      from Projects_CRStatus
      group by wbs1,wbs2,wbs3) y
    on (x.wbs1=y.wbs1 and x.wbs2=y.wbs2 and x.wbs3=y.wbs3)
    ) z

WHERE RN = 1
于 2013-06-24T16:16:57.067 に答える
0

このステータス コード データを含むテーブルを作成し、そのテーブルを結合すると、このステータス テーブルの列で並べ替えることができるようになります。

于 2013-06-24T16:17:07.413 に答える