如何编写SQL代码将a到b中的表聚合

如何编写SQL代码将a到b中的表聚合,sql,Sql,表a的结构如下 EMP_ID DATE_OF_PURCHASE ITEM_PURCHASED ------------------------------------------ 1 01-JAN-19 BAG 2 01-JAN-19 UMBRELLA 1 03-JAN-19 UMBRELLA 3 01-JAN-19 PERFUME 1 04-J

表a的结构如下

EMP_ID  DATE_OF_PURCHASE    ITEM_PURCHASED  
------------------------------------------
1       01-JAN-19           BAG
2       01-JAN-19           UMBRELLA
1       03-JAN-19           UMBRELLA
3       01-JAN-19           PERFUME
1       04-JAN-19           PERFUME
我想把它汇总到表b中,如下所示

EMP_ID  BAG     UMBRELLA    PERFUME
------------------------------------
1       YES     YES         YES
2       NO      YES         NO  
3       NO      NO          YES

您可以使用条件聚合:

select emp_id,
       max(case when item_purchased = 'BAG' then 'YES' else 'NO' end) as BAG,
       max(case when item_purchased = 'UMBRELLA' then 'YES' else 'NO' end) as UMBRELLA,
       max(case when item_purchased = 'PERFUME' then 'YES' else 'NO' end) as PERFUME
from t
group by emp_id;

您的日期格式建议使用Oracle。是一个Dfiddle,用于说明此工作。

您可以使用条件聚合:

select emp_id,
       max(case when item_purchased = 'BAG' then 'YES' else 'NO' end) as BAG,
       max(case when item_purchased = 'UMBRELLA' then 'YES' else 'NO' end) as UMBRELLA,
       max(case when item_purchased = 'PERFUME' then 'YES' else 'NO' end) as PERFUME
from t
group by emp_id;
您的日期格式建议使用Oracle。是一个用来说明这一工作原理的数据小提琴。

试试这个:

select emp_id,
case when BAG = 1 then 'YES' else 'NO' end as BAG,
case when UMBRELLA = 1 then 'YES' else 'NO' end as UMBRELLA,
case when PERFUME = 1 then 'YES' else 'NO' end as PERFUME
FROM
(select emp_id,
       max(case when item_purchased = 'BAG' then 1 else 0 end) as BAG,
       max(case when item_purchased = 'UMBRELLA' then 1 else 0 end) as UMBRELLA,
       max(case when item_purchased = 'PERFUME' then 1 else 0 end) as PERFUME
from t
group by emp_id);
干杯

试试这个:

select emp_id,
case when BAG = 1 then 'YES' else 'NO' end as BAG,
case when UMBRELLA = 1 then 'YES' else 'NO' end as UMBRELLA,
case when PERFUME = 1 then 'YES' else 'NO' end as PERFUME
FROM
(select emp_id,
       max(case when item_purchased = 'BAG' then 1 else 0 end) as BAG,
       max(case when item_purchased = 'UMBRELLA' then 1 else 0 end) as UMBRELLA,
       max(case when item_purchased = 'PERFUME' then 1 else 0 end) as PERFUME
from t
group by emp_id);

干杯

谢谢您的帮助,但在三列中它都不会返回“否”。对于所有情况,这意味着对于所有物品购买者和一个物品购买者,您可以设置一个DBFIDLE或类似的工具吗?这意味着要么是一个非常神秘的排序规则,其中
'YES'<'NO'
(我甚至不知道是否存在)或者您购买的
item_
值与问题中显示的值不完全相同。谢谢您的帮助,但在三列中返回NO,对于所有情况,这意味着对于所有物品购买者和一个物品购买者,您可以设置一个dbfiddle或类似的东西吗?这可能意味着要么是一个非常神秘的排序规则,其中
'YES'
(我甚至不知道是否存在)要么你购买的
物品的值与你在问题中所显示的值不完全相同。问题没有被Oracle标记,而
解码
是特定的。问题没有被Oracle标记,而
解码
是它特有的。