2016-08-04 12 views
0

Ich versuche, mehrere Zeilen pro Firma zu einer zu kombinieren, wobei der letzte Spaltenattributwert pro Zeile beibehalten wird.Den letzten Spaltenwert aus mehreren Zeilen ziehen

WITH COMPANY_DATA AS(
SELECT 1 ID, 'ABC Co.' COMPANY, NULL ATTR1, 'A' ATTR2, 'B' ATTR3, '8/1/2016 8:53.17 AM' ROW_UPDATED FROM DUAL UNION ALL 
SELECT 2 ID, 'ABC Co.' COMPANY, 'F' ATTR1, NULL ATTR2, NULL ATTR3, '8/1/2016 8:55.19 AM' ROW_UPDATED FROM DUAL UNION ALL 
SELECT 3 ID, 'ABC Co.' COMPANY, 'E' ATTR1, 'A' ATTR2, NULL ATTR3, '8/1/2016 8:55.23 AM' ROW_UPDATED FROM DUAL 
) 

SELECT COMPANY, 
     ATTR1, 
     ATTR2, 
     ATTR3 
FROM COMPANY_DATA 

Aus der obigen Beispieltabelle I zurückkehren wollen:

COMPANY= ABC Co. 
ATTR1 = E 
ATTR2 = A 
ATTR3 = B 

Antwort

0

Ooh, das ist schwierig. Sie können keep:

select company, 
     max(attr1) keep (dense_rank first order by (case when attr1 is not null then id end) desc nulls last) as attr1, 
     max(attr2) keep (dense_rank first order by (case when attr2 is not null then id end) desc nulls last) as attr2, 
     max(attr3) keep (dense_rank first order by (case when attr3 is not null then id end) desc nulls last) as attr3 
from company_data cd 
group by company; 
verwenden
Verwandte Themen