0

tab.col1、tab.col2、tab.col3、tab.col4の値をResult.INTRと比較することによるRSC

タブテーブルには数千行あります

col1から4のいずれかがNULLの場合、1を返します

Col1 will hold values pertaining to RID = 10
Col2 will hold values pertaining to RID = 20
Col3 will hold values pertaining to RID = 30
Col4 will hold values pertaining to RID = 40

例:

    if tab.col1 is 3 then 4 
    if tab.col2 is 'R' then 3       
    if tab.col3 is 1900 then it query should give 4
    if 1945 then 3
    if 1937 then 3 (lower bound is less than and upper bound is greater than equal to)
    if tab.col4 is 6 then 5

and so on.....


Result table
     RID     INTR       RSC
     -----    -----      ----- 
      10        1         0
      10        2         1
      10        3         4                         
      10        4         2
      20        I         4
      20        R         3
      20        U         1
      30     1900         5
      30     1900-1937    4
      30     1937-1967    3
      30     1967         3
      40      3-4         2
      40      1-3         1
      40      4           5
4

3 に答える 3

0

次のようなものを試してください:

select t1.RSC, t2.RSC, t3.RSC, t4.RSC
from your_table tab join Result t1 on t1.RID=10 and t1.INTR=tab.col1
     join Result t2 on t2.RID=20 and t2.INTR=tab.col2
     join Result t3 on t3.RID=30 and t3.INTR >= regexp_substr(tab.col3, '^\d*') and t3.INTR <= regexp_substr(tab.col3, '\d*$')
     join Result t4 on t4.RID=40 and t4.INTR >= regexp_substr(tab.col4, '^\d*') and t4.INTR <= regexp_substr(tab.col4, '\d*$')
于 2013-02-17T13:14:16.870 に答える
0

Oracle.Google の CASE 関数と DECODE 関数を確認し、いくつかの例を確認してください。それらを使用して要件を実装できます。

たとえば、これを確認してください http://www.club-oracle.com/forums/case-and-decode-two-powerfull-constructs-of-sql-t181/

于 2013-02-15T17:46:57.187 に答える
0

これは次のように行います。

select (case when tab.col1 = 3 then 4
             when tab.col2 = 'R' then 3
             when tab.col3 = 1900 then 4
             when tab.col3 in (1945, 1937) then 3
             when tab.col4 = 6 then 5
        . . .
于 2013-02-15T18:04:42.727 に答える