Hacer Pivot en SQL Oracle

Hola,

Tengo la siguiente query:

select *

    from

    (select pre_sap_cod

     from pre

    )

    pivot

    (

            count(pre_sap_cod)

            for pre_sap_cod in ('1' , '3')

    );

Va bien, porque obtengo lo que quiero:

   '1'     |      '3'

8708   |   281259

Pero hay más valores que  1  y  3, y si intento hacer esto;

select *

    from

    (select pre_sap_cod

     from pre

    )

    pivot

    (

            count(pre_sap_cod)

            for pre_sap_cod in (select distinct pre_sap_cod from  pre)

    );

Obtengo el mensaje de error:  ora-00936: missing expression

¿Qué puedo hacer??.   Estoy usando Pivot porque quiero la información en columnas.

Gracias por adelantado.

1 Respuesta

Respuesta
1

El operador pivot restringe a valores conocidos, así que no es posible hacerlo como comentas. Necesitarás hacerlo a través de una query dinámica. Te pongo un ejemplo de como podrías hacerlo (si lo vas a hacer en un código puedes definírtelo como una función):

Declare
valores VARCHAR2(2000);
sentencia VARCHAR2(2500);
cursor pre_cur IS select distinct pre_sap_cod from pre;
begin
for pre_rec in pre_cur loop
if valores is null then
valores := to_char(pre_rec.pre_sap_cod)||'''';
else
valores := valores || ','''|| to_char(pre_rec.pre_sap_cod)||'''';
end if;
END loop;
sentencia := 'SELECT * from (select pre_sap_cod from pre) pivot (count(pre_sap_cod) for pre_sap_cod in('
||valores||'))';
EXECUTE IMMEDIATE sentencia;
END;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas