Dodanie wartości do kolumny

0

Mam następujące zapytanie w mssql

SELECT 
  kh_Symbol AS Symbol, 
  adr_Nazwa AS Nazwa, 
  adr_NIP AS NIP,
  adr_Adres AS Adres,
  adr_Kod AS Kod,
  adr_Miejscowosc AS Miejscowość,
  adr_Powiat AS Powiat,
  woj_Nazwa AS Województwo,
  adr_Telefon AS NrTelefonu
FROM kh__Kontrahent
  INNER JOIN adr__Ewid ON kh_Id = adr_IdObiektu
  INNER JOIN sl_Panstwo ON adr_IdPanstwo=pa_Id
  INNER JOIN sl_Wojewodztwo ON woj_Id=adr_IdWojewodztwo
WHERE adr_TypAdresu=1

Problem jest taki, że rekord Powiat jest pusty i potrzebuje go zaciągnąć z innej tabeli o nazwie sl_KodPocztowy, która zawiera spis wszystkich kodów pocztowych, gmin, województw, itd. Ale za bardzo nie wiem jak to zrobić.
Kolumny w tabeli kodów wyglądają tak (te co nas interesują):

  • kc_K (kod pocztowy)
  • kc_P (powiat)

Wydaje mi się, że najprościej będzie wykonać jakieś porównanie kodów pocztowych w tabeli kodów z wynikiem pierwszego zapytania. I w jakiś magiczny sposób wrzucenie ich jako powiat do wyniku. Czy jedna opcja to zrobienie tego przy użyciu tabeli tymczasowej? Czy można to jeszcze jakoś inaczej zrobić? Prosiłbym o nakierowanie na rozwiązanie.

1

Jeśli po kodzie pocztowym to jak poniżej:

SELECT 
	kh_Symbol AS Symbol, 
	adr_Nazwa AS Nazwa, 
	adr_NIP AS NIP,
	adr_Adres AS Adres,
	adr_Kod AS Kod,
	adr_Miejscowosc AS Miejscowość,
	--adr_Powiat AS Powiat,
	kc_P AS Powiat,
	woj_Nazwa AS Województwo,
	adr_Telefon AS NrTelefonu
FROM
	kh__Kontrahent
	INNER JOIN adr__Ewid ON kh_Id = adr_IdObiektu
	INNER JOIN sl_Panstwo ON adr_IdPanstwo=pa_Id
	INNER JOIN sl_Wojewodztwo ON woj_Id=adr_IdWojewodztwo
	INNER JOIN sl_KodPocztowy ON adr_Kod=kc_K
WHERE adr_TypAdresu=1
0

Dzięki za naprowadzenie.
Zrobiłem prawie to samo, tylko przez nieuwagę porównywałem w inner joinie powiat zamiast kodu ;)
I się dziwiłem czemu nie działa...

0

Po przeoraniu całości zlokalizowałem problem.
W tabeli sl_KodPocztowy do każdego kodu jest podana miejscowość oraz ulica (bez numeru). I niektóre pozycje są w dużej części powielone, ponieważ kod pocztowy występuje, np 10x.
Postanowiłem więc zmienić:

INNER JOIN sl_KodPocztowy ON adr_Kod=kc_K

Na

INNER JOIN sl_KodPocztowy ON adr_Kod=kc_K AND adr_Miejscowosc=kc_M

Jest lepiej ale dalej generuje sporo powtórzeń. Myślałem, żeby do tego dodać warunek sprawdzania dodatkowo ulicy, ale tu pojawił się problem inny. W tabeli sl_KodPocztowy jest ulica w formacie: "Wyszyńskiego", czyli bez przedrostka ul. oraz bez numeru. Niestety w tabeli z adresem kontrahenta ta ulica jest wpisana różnie, np.: ul. Cicha 10 lub 1 maja 3, inne są poprawnie, czyli powiedzmy Wyszyńskiego 10. I za bardzo nie mam pomysłu jak sobie z tym poradzić. Jakaś rada?

1

Na szybko pisane ale powinno działać.

SELECT 
    kh_Symbol AS Symbol, 
    adr_Nazwa AS Nazwa, 
    adr_NIP AS NIP,
    adr_Adres AS Adres,
    adr_Kod AS Kod,
    adr_Miejscowosc AS Miejscowość,
    --adr_Powiat AS Powiat,
    q.kc_P AS Powiat,
    woj_Nazwa AS Województwo,
    adr_Telefon AS NrTelefonu
FROM
    kh__Kontrahent
    INNER JOIN adr__Ewid ON kh_Id = adr_IdObiektu
    INNER JOIN sl_Panstwo ON adr_IdPanstwo=pa_Id
    INNER JOIN sl_Wojewodztwo ON woj_Id=adr_IdWojewodztwo
    --INNER JOIN sl_KodPocztowy ON adr_Kod=kc_K
	INNER JOIN (SELECT DISTINCT kc_K,kc_P FROM sl_KodPocztowy) as q ON adr_Kod=q.kc_K
WHERE adr_TypAdresu=1
0

Dzięki za podesłanie możliwego rozwiązania. Niestety ale i tak wyrzuca parę powtórzeń ~1000 na cały wynik wyszukiwania. Najczęściej w momencie miast powiatów.
Wynik poprawny uzyskałem dodając DISTINCT do pierwszego SELECT'a. Może nie jest idealnym rozwiązaniem ale na potrzeby jednorazowego eksportu danych jest OK.

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