2017-09-25 109 views
0

我有以下表格,我希望根据不同类型的编号获得结果,每CONTRACT_ID可用。Oracle - 根据列值进行筛选

表:

______________________________________________________________________________________ 
|Source    | CONTRACT_ID | TYPE  | ADDRESS | PHONE   | 
______________________________________________________________________________________ 
|Source1   | 1234  | INSURED  | unique1 | 4321   | 
______________________________________________________________________________________ 
|Source1   | 1234  | INSURED  | unique1 | 4321   | 
______________________________________________________________________________________ 
|Source1   | 1234  | DRIVER  | unique1 | 4321   | 
______________________________________________________________________________________ 
|Source1   | 1234  | INSURED  | unique1 | 4321   | 
______________________________________________________________________________________ 
|Source2   | 2345  | INSURED  | unique2 | 5678   | 
______________________________________________________________________________________ 
|Source2   | 2345  | DRIVER  | unique2 | 5678   | 
______________________________________________________________________________________ 
|Source2   | 2345  | CONTRACT | unique2 | 5678   | 
______________________________________________________________________________________ 

结果:

______________________________________________________________________________________ 
|Source    | CONTRACT_ID | ROLES  | ADDRESS | PHONE   | 
______________________________________________________________________________________ 
|Source1   | 1234  | 2   | unique1 | 4321   | 
______________________________________________________________________________________ 
|Source2   | 2345  | 3   | unique2 | 5678   | 
______________________________________________________________________________________ 

即在结果表中的ROLES列应为不同TYPE S的一个独特的数CONTRACT_ID

任何人都可以帮忙吗?

+0

你到目前为止尝试过什么? –

+0

我已经冲浪,但仍然无法得到如何计算不同的varchar值@KaushikNayak的数量! – Nidheesh

回答

0

我认为你正在寻找count(distinct)

select Source, CONTRACT_ID, ADDRESS, PHONE, count(distinct type) as roles 
from t 
group by Source, CONTRACT_ID, ADDRESS, PHONE ; 

这不是 “过滤”。这是“聚合”。

1
SELECT max(source) , contract_id , 
count(DISTINCT type) roles , max(address), max(phone) 
FROM Table group by contract_id ;