首页 > 解决方案 > 数据透视表:在 oracle 中选择聚合列

问题描述

我正在尝试使用数据透视将行转换为列,但我无法在最终输出中添加聚合列 t_flg。对此有任何建议。

 CREATE TABLE "TEST_PI" 
   ("ID" NUMBER(20,0), 
    "T_NAME" VARCHAR2(20 CHAR), 
    "T_FLG" VARCHAR2(1 CHAR)
   ) 


INSERT INTO test_pi VALUES (100 ,EVENT, N);
INSERT INTO test_pi VALUES (100 ,EVENT, N);
INSERT INTO test_pi VALUES (200 ,EVENT, Y);
INSERT INTO test_pi VALUES (200 ,EVENT, Y);
INSERT INTO test_pi VALUES (300 ,EVENT, Y);
INSERT INTO test_pi VALUES (300 ,EVENT, Y);

我试过了

 WITH pivot_data AS (
 select ID,T_NAME,T_FLG from TEST_PI
 )
SELECT *
FROM   pivot_data
PIVOT (
MIN(T_FLG) 
FOR T_NAME 
IN  ('EVENT'      AS EVENTS,
     'CAT'        AS CAT
    )
);

预期产出

ID  T_FLG EVENTS  CAT
100  N     N      N
200  Y     Y      Y
300  Y     Y      Y

标签: sqloracle12c

解决方案


只需使用条件聚合。我认为这就是你想要的:

select id, min(t_flg) as t_flg,
       min(case when t_name = 'EVENT' then t_value end) as event,
       min(case when t_name = 'CAT' then t_value end) as cat
from test_pi
group by id;

推荐阅读