我有一个表EmpDetail
,有三列:
EMP_NAME DETAIL_ID DETAIL
----------------------------------
ABC ADDRESS abc123
ABC PHONE 12345
ABC EMAIL abc@xyz
BCD ADDRESS bcd234
BCD PHONE 23456
BCD EMAIL bcd@345
我想创建一个新表,以便DETAIL_ID
中的值成为新的列名:
EMP_NAME ADDRESS PHONE EMAIL
----------------------------------------
ABC abc123 12345 abc@xyz
BCD bcd234 23456 bcd@345
我已经尝试加入,但我无法获得所需的结果。
请建议一种方法。
答案 0 :(得分:1)
这是一个如何仅仅加入两个细节,地址和电话的例子:
insert into NewTable
(EMP_NAME, ADDRESS, PHONE)
select name.EMP_NAME
, addr.DETAIL
, phone.DETAIL
from (
select distinct EMP_NAME
from OldTable
) name
left join
OldTable addr
on addr.EMP_NAME = name.EMP_NAME
and addr.DETAIL_ID = 'ADDRESS'
left join
OldTable phone
on phone.EMP_NAME = name.EMP_NAME
and phone.DETAIL_ID = 'PHONE'
分组也有效,可能有点简单:
insert into NewTable
(EMP_NAME, ADDRESS, PHONE)
select EMP_NAME
, max(case when DETAIL_ID = 'ADDRESS' then DETAIL end)
, max(case when DETAIL_ID = 'PHONE' then DETAIL end)
from OldTable
group by
EMP_NAME
答案 1 :(得分:0)
CREATE TABLE NewTable AS
SELECT EMP_NAME ,
wm_concat(ADDRESS) ADDRESS,
wm_concat(PHONE) PHONE,
wm_concat(EMAIL) EMAIL
FROM
(SELECT EMP_NAME ,
CASE
WHEN DETAIL_ID='ADDRESS'
THEN DETAIL
ELSE NULL
END ADDRESS ,
CASE
WHEN DETAIL_ID='PHONE'
THEN DETAIL
ELSE NULL
END PHONE ,
CASE
WHEN DETAIL_ID='EMAIL'
THEN DETAIL
ELSE NULL
END EMAIL
FROM EmpDetail
)
GROUP BY EMP_NAME;