在一列上选择distinct获取一行

wnavrhmk  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(363)

我有下表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\u id和phone\u number,如果address=b,那么ph\u number else null作为phone\u number
我的输出应该如下所示,其中sql选择add\u type作为b,并将ph\u 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

我有两排,我需要一排有PHU编号的。我哪里做错了?我用 Impala 作为我的数据库。

b91juud3

b91juud31#

下面的代码将为您提供所需的输出:

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

相关问题