在一列上选择distinct以获得一行

时间:2018-01-11 07:00:52

标签: select distinct impala

我在表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作为我的数据库。

1 个答案:

答案 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