Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Pomocy znowu z banałem w SQL... :)

06.11.2012 15:37
legrooch
1
legrooch
231
MPO Squad Member

Pomocy znowu z banałem w SQL... :)

Witam,

potrzebuję pomocy z jednym z zapytań. Zastanawiam się jak rozwiązać zapytanie, gdzie:
a) w tabeli mam następujące kolumny:

[imie],[nazwisko],[kor_nazwa],[kor_ulica],[kor_dom],[kor_lokal],[kor_kod],[kor_miejscowosc],[zamiesz_ulica],[zamiesz_dom],[zamiesz_lokal],[zamiesz_kod],[zamiesz_miejscowosc],[zameld_ulica],[zameld_dom],[zameld_lokal],[zameld_kod],[zameld_miejscowosc]

b) potrzebuję wyświetlić wszystkie wiersze

c) w wierszach zwrotnych potrzebuję otrzymać:

‹nazwa›,ulica,dom,lokal,kod,miejscowosc

d) założenia dla wyniku:
- jeżeli miasto i ulica są wypełnione w korespondencyjnym - wybieramy
- jeżeli korespondencyjny był false - powtarzamy operację dla zamieszkania
- jeżeli i zamieszkania był false - powtarzamy operację dla zameldowania

e) jeżeli brakuje adresów na podstawie powyższych założeń - wyświetlamy pusty wiersz z imieniem i nazwiskiem posiadanym

Mogę liczyć na pomoc? :)

06.11.2012 16:31
Madril
2
odpowiedz
Madril
240
I Want To Believe

Nie wiem jaki SQL, ten standardowy może tego nie mieć.
W Oraclowym (w Transact-SQL chyba też) przy takiej strukturze na luzie można skorzystać z wyrażenia CASE.

06.11.2012 16:40
3
odpowiedz
ElNinho
159
STROH 80

można się bawić w CASE albo DECODE ale ...

nie bardzo rozumiem, co masz na myśli przez false w adresach
ale zakładając, że to czy dany adres jest wypełniony czy nie, wyznacza nam nazwa ulicy, możesz sobie pyknąć uniona
select [nazwa,kor_ulica,kor_dom,kor_lokal,kor_kod,kor_miejscowosc] from tabela where kor_ulica is not null and kor_miejscowosc is null
union
select [nazwa,zamiesz_ulica,zamiesz_dom,zamiesz_lokal,zamiesz_kod,zamiesz_miejscowosc] from tabela where kor_ulica is null and kor_miejscowosc is null and zamiesz_ulica is not null and zamiesz_miejscowosc is not null
union
select [nazwa,zameld_ulica,zameld_dom,zameld_lokal,zameld_kod,zameld_miejscowosc] from tabela where kor_ulica is null and kor_miejscowosc is null and zamiesz_ulica is null and zamiesz_miejscowosc is null and zameld_ulica is not null and zameld_miejscowosc is not null
union
select [nazwa,'','','','',''] from tabela where kor_ulica is null and kor_miejscowosc is null and zamiesz_ulica is null and zamiesz_miejscowosc is null and zameld_ulica is null and zameld_miejscowosc is null

oczywiście zamiast ciągu [ulica,dom,lokal,kod,miejscowosc] wstawiasz odpowiednie kolumny

EDIT: masz :), nie jest do końca poprawnie ale sam się pomęcz ;)

06.11.2012 17:05
legrooch
4
odpowiedz
legrooch
231
MPO Squad Member

Dobra, sprawdzę to do jutra.
Dam znać co i jak.

Niunio ==> jako false miałem na myśli nie spełnienie wariantu, gdzie miejscowość i ulica są wypełnione.
Chcę zrobić wysyłkę. Zrealizować ją muszę następująco - w pierwszej kolejności do osób z adresami korespondencyjnymi. Jeżeli zostaną osoby, które nie mają podanego miasta i ulicy korespondencyjnej, to szukam dla nich tego zestawu w adresie zamieszkania. Jak i tu nie ma tych danych, to wybieram z zameldowania (tu już wszyscy mają komplet).

Ale oczywiście wyświetlam wszystkie kolumny dla konkretnego rodzaju adresu.

Forum: Pomocy znowu z banałem w SQL... :)