Select z czymś à la distinct

0

Cześć,
Mam tabele:

|id|nazwa|nr1|nr2|
------------------
|0 |lek1 |123|123|
|1 |lek12|0  |123|
|2 |lek23|123|0  |
|3 |lek37|123|123|
|4 |lek2 |321|321|
|5 |lek3 |0  |111|
|6 |lek4 |111|0  |
|7 |lek5 |0  |0  |
|8 |lek6 |0  |0  |

Potrzebuję zapytania które zwróci mi:

|id|nazwa|nr1|nr2|
------------------
|0 |lek1 |123|123|<-to wyświetla się zamiast |12|lek1a|0  |123|, |2 |lek23|123|0  | i |3 |lek37|123|123|
|4 |lek2 |321|321|
|5 |lek3 |0  |111|
|6 |lek4 |111|0  |
|7 |lek5 |0  |0  |
|8 |lek6 |0  |0  |

Mam nadzieję że na powyższym przykładzie widać o co chodzi, bo nie potrafię tego ubrać w słowa żeby dało się zrozumieć ;)

Edit.
Albo postaram się to jakoś opisać :P
Czyli robię distinct po kolumnie nr1, tylko gdy nie jest równa 0, potem robię distinct na kolumnie nr2 z takim samym wyjątkiem jak przy 1. Dodatkowo gdy mam wiersz (podaje same kolumny nr1 i nr2 bo tylko one mają tu znaczenie) |0|123|, |123|123| i |123|0| to daje nam to tylko wiersz|123|123|

0

Czyli chcesz odfiltrować te rekordy gdzie nazwa ma a/b/c w końcówce? Może regexp do nazwy wystarczy?
https://www.postgresql.org/docs/9.5/static/functions-matching.html

0

To tutaj nie ma żadnego patternu :P. Pomyślałbym że chodzi o min(nazwa) dla groupBy nr1, nr2, ale lek5 i lek6 wyświetlają się 2 razy. Chyba jednak musisz usiąść i słowami opisać to co chcesz zrobić.

PS. na temat odpisuj w postach.

0

Zadziałało coś takiego nie wiem czy to optymalne rozwiązanie, ale zwraca to co trzeba :P

SELECT DISTINCT ON (nr1) * FROM table WHERE nr1 > 0
UNION
SELECT DISTINCT ON (nr2) * FROM table WHERE nr2 > 0
UNION
SELECT * FROM table WHERE nr1 = 0 AND nr2 = 0

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