我在表A下面
Empl_id Add_type Ph_no
66 H 44-14424
66 F 44-1442
66 C 67-384-295
66 B (8888) 8440
66 H 608 6775
57 B 12345
57 C 78910
58 C 9988
我需要获得明显的emp_id和phone_number,如果地址= B,则ph_number,否则为null,因为phone_number
我的输出应该如下所示,SQL选择Add_type为B并拉取ph_no else显示为null
Empl_id Ph_no
66 (8888) 8440
57 12345
58 NULL
我在下面尝试过查询:
select distinct y.emp_id, case when Add_type='B' then i.iphone else null end
ip from (SELECT empl_id,Add_type as phty,ph_no as ph,Row_number()
OVER(PARTITION BY employee_id ORDER BY employee_id) rn
FROM
(SELECT DISTINCT
E.empl_id,E.Add_type,E.ph_no FROM Table Emp E )t )y
left outer join
(SELECT
e1.empl_id,Add_type,E1.ph_no, case when Add_type='B' then ph_no else null
end phone
FROM Table Emp E1
group by E1.employee_id, Address,
E1.phone_number )i
on y.empl_id=i.empl_id
WHERE y.rn = 1 and i.emp_id='66'
我得到的上述查询的输出是
emp_id ph
66 (8888) 8440
66 NULL
我得到2行,我需要有一行ph_no。我在哪里做错了?我使用Impala作为我的数据库。
答案 0 :(得分:0)
以下代码将为您提供所需的输出:
SELECT DISTINCT
empl_id
, ph_num
from
(
SELECT
empl_id
, add_type
, CASE
WHEN add_type = 'B'
THEN ph_num
ELSE NULL
END AS ph_num
FROM table
) t1