1

次のような古いストアドプロシージャがあります。

CASE
      WHEN (org.org_misc_data = 'PAC') THEN 'pac'
      WHEN (org.dues_category = 'PART') THEN 'partner_member'
      WHEN (org.dues_category = 'FREE' AND org.org_status_flag = 'P') THEN 'associate_member'
      ELSE 'non_member'
END AS org_status

現在書かれているように、最初のWHEN句に達するとすぐに、私のorg_status値は「pac」になります。誰かがこれを書き直して、org_status複数の値を返すことができるようにする方法を教えてもらえますか(つまり、「pac |partner_member」)。

4

4 に答える 4

2

CASE2つの式を使用するのはどうですか?

CASE
  WHEN (org.org_misc_data = 'PAC') THEN 'pac|' ELSE '' END
  + CASE 
    WHEN (org.dues_category = 'PART') THEN 'partner_member'
    WHEN (org.dues_category = 'FREE' AND org.org_status_flag = 'P') THEN 'associate_member'
    ELSE 'non_member'
END AS org_status

考えられるすべての順列の概要を実際に説明していないため、明確な答えを出すのは困難です。

于 2012-05-31T18:19:34.820 に答える
1

ああ、それはとてもいいでしょう。SQLは、ケースからの複数の戻りをサポートしていません。

文字列操作に不利でない場合は、次のようなことを行うことができます。

select *,
       left(org_status_letter, charindex('|', org_status_letter) - 1) as org_status,
       substring(org_status_letter, charindex('|', org_status_letter) + 1, 1000) as letter
from (select (CASE WHEN (org.org_misc_data = 'PAC') THEN 'pac|a'
                   WHEN (org.dues_category = 'PART') THEN 'partner_member|b'
                   ...
                   ELSE 'non_member'
              END) AS org_status_letter 

より強力なソリューションには、ルックアップテーブルが含まれます。したがって、caseステートメントは一意のキーを生成します。次に、このキーはルックアップテーブルに結合され、必要な数の値を持つことができます。ただし、これは定数では機能しますが、数式では機能しません。

于 2012-05-31T17:57:49.567 に答える
0

値を組み合わせて後で元に戻すよりも、常に別々に保つ方が良いと思います。

CASE
      WHEN (org.org_misc_data = 'PAC') THEN 1 ELSE 0 END AS IsPack,
CASE     
      WHEN (org.dues_category = 'PART') THEN 'partner'
      WHEN (org.dues_category = 'FREE' 
                  AND org.org_status_flag = 'P') THEN 'associate'
      ELSE 'non' END AS MemberStatus
END AS org_status
于 2012-05-31T19:15:10.883 に答える
-1

条件のAND演算を開始し、それぞれの値を返すことができます。

CASE
    WHEN (org.org_misc_data = 'PAC' AND org.dues_category = 'PART') THEN 'pac|partner_member'
    ....
END AS org_status
于 2012-05-31T17:53:23.940 に答える