Tengo una tabla como la siguiente y me gustaría transformarla.
year month week type count 2021 1 1 A 5 2021 1 1 B 6 2021 1 1 C 7 2021 1 2 A 0 2021 1 2 B 8 2021 1 2 C 9Me gustaría pivotar de la siguiente manera.
year month week ABC 2021 1 1 5 6 7 2021 1 2 0 8 9Intenté como la siguiente declaración, pero devolvió muchas columnas nulas. Y me pregunto si debo agregar columnas una por una cuando se agregue un nuevo tipo.
select year, month, week, case when type in ('A') then count end as A, case when type in ('B') then count end as B, case when type in ('C') then count end as C, from tableSi alguien tiene una opinión, por favor hágamelo saber. Gracias
Puede usar la cláusula FILTER :
SELECT year, month, week, MAX("count") FILTER (WHERE type = 'A') as A, -- 2 MAX("count") FILTER (WHERE type = 'B') as B, MAX("count") FILTER (WHERE type = 'C') as C FROM mytable GROUP BY year, month, week -- 1 ORDER BY year, month, week o puede usar la cláusula CASE :
SELECT year, month, week, MAX (CASE WHEN type = 'A' THEN "count" END) AS A, MAX (CASE WHEN type = 'B' THEN "count" END) AS B, MAX (CASE WHEN type = 'C' THEN "count" END) AS C FROM mytable GROUP BY year, month, week ORDER BY year, month, weekGROUP BY .MAX() o SUM() . Finalmente, debe aplicar un tipo de filtro ( CASE o FILTER ) para agregar solo los datos relacionados. Además : tenga en cuenta que las palabras count , year , month , week son palabras clave de SQL . Para evitar cualquier complicación, debe pensar en otros nombres de columna.