Oracle - join duplikacja wartości

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?

Kopiuj
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

kate87
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 3 lata
0
Kopiuj
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?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
3
Kopiuj
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.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
MM
  • Rejestracja:prawie 7 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Poznań
  • Postów:13
0

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

YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:3 dni
  • Postów:2370
1

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

Kopiuj
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)
  );
edytowany 1x, ostatnio: yarel

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.