Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tôi xóa các bản sao khỏi listagg

Đầu tiên hãy chọn các giá trị DISTINCT bạn cần, sau đó áp dụng LISTAGG cho chúng. Đây là một ví dụ dựa trên giản đồ của Scott.

SQL> -- Duplicate jobs within the department
SQL> select deptno, listagg(job, ', ') within group (order by job) jobs
  2  from emp
  3  group by deptno;

    DEPTNO JOBS
---------- ------------------------------------------------------------
        10 CLERK, MANAGER, PRESIDENT
        20 ANALYST, ANALYST, CLERK, CLERK, MANAGER
        30 CLERK, MANAGER, SALESMAN, SALESMAN, SALESMAN, SALESMAN

SQL>
SQL> -- This won't work - DISTINCT can't be used in LISTAGG
SQL> select deptno, listagg(distinct job, ', ') within group (order by job) jobs
  2  from emp
  3  group by deptno;
select deptno, listagg(distinct job, ', ') within group (order by job) jobs
               *
ERROR at line 1:
ORA-30482: DISTINCT option not allowed for this function


SQL>
SQL> -- So - select distinct jobs first, then apply LISTAGG to it
SQL> select x.deptno, listagg(x.job, ', ') within group (order by x.job) jobs
  2  from (select distinct deptno, job
  3        from emp) x
  4  group by x.deptno;

    DEPTNO JOBS
---------- ------------------------------------------------------------
        10 CLERK, MANAGER, PRESIDENT
        20 ANALYST, CLERK, MANAGER
        30 CLERK, MANAGER, SALESMAN

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm RPAD () trong Oracle

  2. ORA-01111 trong MRP trong cơ sở dữ liệu Chế độ chờ vật lý

  3. Chọn hàng đầu tiên của mỗi nhóm trong sql

  4. Cách bật tính năng theo dõi trong ứng dụng oracle r12

  5. Làm thế nào để chuyển đổi SDO_GEOMTRY trong GeoJSON