[oracle, PL/SQL] tabele

0

Witam mam pewne dane w paru wierszach w tablei jak na rysunku poniżej po lewej pierwsze 2 kolumny sie powtarzaja w trzeciej kolumnie dane sie zmieniaja w ty wypadku cyfry. Chce zrobić tak jak jest po prawej tzn aby dane z pierwszych dwóch kolumn się nie powtarzały tylko były wyświetlane w jednym wierszu a dane z 3 kolumny zostały wypisane wszystkie.
Ciężko to opisać lepiej widać na rysunku. Proszę o pomoc

user image</url>

0

hej, moim zdaniem musisz użyć jakiejś funkcji w PL/sqlu

CREATE OR REPLACE FUNCTION GET_ALL_ENTRIES (in_imie NUMBER,in_nazwiski NUMBER) RETURN VARCHAR2 IS
    CURSOR C1 IS
   SELECT IMIE, NAZWISKO, cyfra
   FROM TABELA where imie=in_imie and nazwisko=in_nazwisko;
    V_RET_VAL VARCHAR2(2000);
BEGIN
   FOR R1 IN C1 LOOP
      IF (V_RET_VAL IS NOT NULL) THEN
         V_RET_VAL := V_RET_VAL||', '||R1.CYFRA;
    ELSE
         V_RET_VAL := R1.CYFRA;
    END IF;
   END LOOP;
   RETURN V_RET_VAL;
EXCEPTION
   WHEN OTHERS THEN
      RETURN SQLERRM;
END;

potem w zapytaniu używasz grupowania i tej funkcji

select imie, nazwisko, get_all_entries(imie,nazwisk)
from tabela

inne podejścia tu:
http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php
group by imie, nazwisko

0

Super!
Dzieki wielkie, akurat mam 11g R2 to pewnie użyje LISTAGG ale sprawdze też Twój pomysł :)
THX!!

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