2

私は次のような結果セットを持っています:

Name number reg_type1 reg_type2 reg_type3 reg_type4 reg_type5 reg_type6 reg_type7
aaa   123       Y         N       Y          N          Y       N         N
bbb   234       N         N       Y          N          Y       N         N
ccc   456       Y         N       Y          Y          N       Y         Y

そして、次のような結果セットが必要です:

Name   number      level1       level2        level3      level4      level5 
aaa     123       reg_type1    reg_type3     reg_type5    NULL         NULL
bbb     234       reg_type3    reg_type5        NULL      NULL         NULL
ccc     456       reg_type1    reg_type3     reg_type4    reg_type6   reg_type7

誰でもこれについて私を助けてください!!

ありがとう!!

4

1 に答える 1

3

それらを別々の列ではなく 1 つの列に配置したい場合、コードは非常に簡単です。

select name, number,
       ((case when reg_type1 = 'Y' then 'reg_type1 ' else '' end) ||
        (case when reg_type2 = 'Y' then 'reg_type2 ' else '' end) ||
        (case when reg_type3 = 'Y' then 'reg_type3 ' else '' end) ||
        (case when reg_type4 = 'Y' then 'reg_type4 ' else '' end) ||
        (case when reg_type5 = 'Y' then 'reg_type5 ' else '' end) ||
        (case when reg_type6 = 'Y' then 'reg_type6 ' else '' end) ||
        (case when reg_type7 = 'Y' then 'reg_type7 ' else '' end)
       )
from t;

それらを別々の列に入れたい場合は、次のようにすることができます。

select name, number,
       substr(regtypes, 1, 10) as level1,
       substr(regtypes, 11, 10) as level2,
       substr(regtypes, 21, 10) as level3,
       substr(regtypes, 31, 10) as level4,
       substr(regtypes, 41, 10) as level5,
       substr(regtypes, 51, 10) as level6,
       substr(regtypes, 61, 10) as level7
from (select name, number,
             ((case when reg_type1 = 'Y' then 'reg_type1 ' else '' end) ||
              (case when reg_type2 = 'Y' then 'reg_type2 ' else '' end) ||
              (case when reg_type3 = 'Y' then 'reg_type3 ' else '' end) ||
              (case when reg_type4 = 'Y' then 'reg_type4 ' else '' end) ||
              (case when reg_type5 = 'Y' then 'reg_type5 ' else '' end) ||
              (case when reg_type6 = 'Y' then 'reg_type6 ' else '' end) ||
              (case when reg_type7 = 'Y' then 'reg_type7 ' else '' end)
             ) as regtypes
      from t
     ) t

このバージョンでは、すべての値の長さが 9 で、間にスペースがあると想定しています。

于 2013-07-24T21:08:39.250 に答える