Oracle - join duplikacja wartości

0

Cześć, bardzo proszę o pomoc.

Chce do tabeli X dołączyć widok Y, który posiada wartości dotyczące zabezpieczeń dla danej umowy.

W tabeli X musi znajdować się tylko pojedynczy numer umowy, w widoku Y numer umowy może znajdować się dwukrotnie ze względu na dwa zabezpieczenia A i B.

Jak zrobić widok w którym nie będzie podwójnych numerów umowy? Pomysł poniżej

screenshot-20180712153206.png

Próbuje coś takiego, ale nie daje to efektu, który chce uzyskać, może muszę jakoś pogrupować wyniki?

SELECT DATA, FIRMA, UMOWA,  
CASE 
WHEN ZABEZPIECZENIE = 'A' THEN 'TAK' ELSE NULL END ZABEZPIECZENIE_A,
CASE
WHEN ZABEZPIECZENIE = 'B' THEN 'TAK' ELSE NULL END ZABEZPIECZENIE_B
from TABELA_X
where DATA = 20180630 
and FIRMA = ABC;

Z powyższego zapytania otrzymuje coś takiego:

screenshot-20180712153552.png

0
SELECT DATA, FIRMA, distinct(UMOWA),  
CASE 
WHEN ZABEZPIECZENIE = 'A' THEN 'TAK' ELSE NULL END ZABEZPIECZENIE_A,
CASE
WHEN ZABEZPIECZENIE = 'B' THEN 'TAK' ELSE NULL END ZABEZPIECZENIE_B
FROM TABELA_X
WHERE DATA = 20180630 
AND FIRMA = ABC;

czy tak zadziałało?

3
SELECT DATA, FIRMA, UMOWA,  
max(CASE WHEN ZABEZPIECZENIE = 'A' THEN 'TAK' ELSE NULL END) ZABEZPIECZENIE_A,
max(CASE WHEN ZABEZPIECZENIE = 'B' THEN 'TAK' ELSE NULL END) ZABEZPIECZENIE_B
FROM TABELA_X
WHERE DATA = 20180630 
AND FIRMA = ABC
group by DATA, FIRMA, UMOWA

generalnie w taki właśnie sposób (dodając max lub min) tworzy się pivoty ręcznie.

0

@abrakadaber: Dokładnie o to chodziło, dzięki wielkie!
@kate87 z użyciem distinct nie udało się :(

1

Można jeszcze pobawić się składnią PIVOTA w Oracle 11+

create table tabela_x (
  data varchar2(10),
  firma varchar2(10),
  umowa varchar2(10),
  zabezpieczenie varchar2(10)
  );
  
insert into tabela_x values ('20180712','ABC','IJ/2/31','A');
insert into tabela_x values ('20180712','ABC','IJ/2/31','B');
insert into tabela_x values ('20180712','ABC','IJ/2/32','A');
insert into tabela_x values ('20180712','ABC','IJ/2/33','B');

SELECT 
  data,firma,umowa,
  nvl2(a_zabezpieczenie,'TAK','NIE') zabezpieczenie_a,
  nvl2(b_zabezpieczenie,'TAK','NIE') zabezpieczenie_b
FROM   
  (SELECT data,firma, umowa, zabezpieczenie FROM tabela_x) 
  PIVOT
  (
    MAX(zabezpieczenie) AS zabezpieczenie FOR (zabezpieczenie) 
    IN ('A' as a, 'B' as B)
  );

1 użytkowników online, w tym zalogowanych: 0, gości: 1