sql >> データベース >  >> RDS >> Oracle

Oracle SQL:区切り文字列で行を並べ替える

    REGEXP_SUBSTR を使用して各行から個々の番号を取り出し、次に LISTAGG を使用して目的の順序でそれらを再結合することができます -- 以下のように:

    WITH 
      T (N) AS --TEST DATA
        (SELECT '31132,11100,44232' FROM DUAL
        UNION
        SELECT '25464,89453,15686' FROM DUAL
        UNION
        SELECT '21561,68547,51612' FROM DUAL),
      T1 (N1) AS --USE THIS BELOW TO SEPARATE OUT FIRST/SECOND/THIRD VALUE FROM EACH ROW
        (SELECT 1 FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL),
      SEPARATED (RN,N) AS 
        (SELECT RN,REGEXP_SUBSTR(N,'[^,]+',1,T1.N1) N FROM --GET THE VALUES FROM EACH ROW WITH AN ACCOMPANYING ROW NUMBER SO WE CAN REGROUP THEM BELOW
          (SELECT ROW_NUMBER() OVER(ORDER BY 1) RN ,N FROM T),T1)
    SELECT LISTAGG(N,',') WITHIN GROUP (ORDER BY N) FROM SEPARATED GROUP BY RN; --USE LISTAGG TO REJOIN THE SEPARATED VALUES IN THE DESIRED ORDER
      


    1. BackupManagerを使用してデータベースを復元する方法

    2. Oracleでは、SQLクエリのWHERE句を1 =1で開始すると便利ですか?

    3. 時間別のMYSQLの順序am/pm

    4. カウントで3つのテーブルを結合する