Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL - Динамично преобразуване на редове в колони

Знам, че не използвате MSSQL, но тази концепция може да ви помогне.

Не съм сигурен, но вместо STRING_AGG може да имате нужда от LISTAGG . Просто се опитвам да предам концепцията тук.

CREATE PROCEDURE PivotMyTable
AS

BEGIN
  DECLARE @cols NVARCHAR(MAX) = '';
  DECLARE @sql NVARCHAR(MAX) = 'select * from (select competency_id from competency_tab t) pivot (count(competency_id) for competency_id in (##COLUMS##))'

  WITH T
  AS
  (SELECT DISTINCT
      competency_id
    FROM competency_tab)
  SELECT
    @cols = STRING_AGG(QUOTENAME(T.competency_id, ''''), ',')
  FROM T

  SET @sql = REPLACE(@sql, '##COLUMNS##', @cols);

  EXEC @sql;

END



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Нежелани нови редове при спулиране на sqlplus резултат в xml файл

  2. Проблеми с графиката:свързване чрез NOCYCLE предишна подмяна в SQL сървър?

  3. Динамичен SQL, използващ конфигурационни таблици

  4. Вземете размера на масива в oracle sql

  5. Как да разрешите ORA-29913 с външни таблици