-3
sno mappingtype username

1      A            xx   
2      B            yy   
3      A            aa    
4      B            bb    

上記は私のテーブルです...次の結果に対するOracleクエリが必要です

sno マッピング タイプ ユーザー名

1     A           xx    
                  aa    

2     B           yy
                  bb
4

3 に答える 3

2

これがSQLバージョンです。(たぶん、sqlplus トリックが必要ですが、それを求めていません)

with a as (
    select 1 sno, 'A' mappingtype, 'xx' username from dual union all
    select 2 sno, 'B' mappingtype, 'yy' username from dual union all
    select 3 sno, 'A' mappingtype, 'aa' username from dual union all
    select 4 sno, 'B' mappingtype, 'bb' username from dual
    )

    select 
        case when rnk=1 then sno end as sno,
        case when rnk=1 then mappingtype end as mappingtype,
        username
    from(       
        select 
               sno, 
               mappingtype, 
               username, 
               row_number()over (partition by mappingtype order by sno) rnk
        from a
        );
于 2013-06-10T07:15:30.440 に答える
0

トリング・フロリン・ギタのコードでは、出力は次のようになりました:

元のコード

したがって、コードにいくつかの変更を加えると、次のようになります。

WITH a AS (
         SELECT 1 sno, 'A' mappingtype, 'xx' username  FROM dual
        WHERE TYPE = 'A' AND username = 'xx'
       UNION ALL
       SELECT 2 sno, 'B' mappingtype, 'yy' username  FROM dual
        WHERE TYPE = 'B' AND username = 'yy'
       UNION ALL
       SELECT 3 sno, 'A' mappingtype, 'aa' username  FROM dual
        WHERE TYPE = 'A' AND username = 'aa'
       UNION ALL
       SELECT 4 sno, 'B' mappingtype, 'bb' username   FROM dual
        WHERE TYPE = 'B' AND username = 'bb') 

        SELECT CASE WHEN rnk = 1 THEN sno END AS sno,
       CASE WHEN rnk = 1 THEN mappingtype END AS mappingtype,
     username
     FROM (SELECT sno,
           mappingtype,
           username,
           ROW_NUMBER () OVER (PARTITION BY mappingtype ORDER BY sno) rnk
         FROM a);

出力は Shalim question で同じになります:

コーディング後

于 2013-06-10T10:11:15.870 に答える