Autor Wątek: Problem z prawidłowym połączeniem tabel w sql  (Przeczytany 2459 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Problem z prawidłowym połączeniem tabel w sql
« dnia: Styczeń 10, 2021, 15:49:40 »
Witam wszystkich forumowiczów.
Jestem nowym użytkownikiem.

Próbuje zautomatyzować sobie proces przenoszenia wszystkich towarów do excela, z jakiegoś anglojęzycznego forum skopiowałem makro które działa, pozostaje tylko napisać prawidłowe połącznie tabel w sql. Jednak napotykam na problem ponieważ indeksy wyświetlają potrojone(tzn. każdy jest razy 3 ) gdzieś tam wyczytałem,że muszę przed select wstawić distinct.
Jednak teraz jeżeli towar jest na stanie to wtedy indeks się dubluje.
Screeny w załączniku.
Prosiłbym o pomoc/naakierowanie na rozwiązanie:)
Łącze tabele  Towar Stan Cena

Select distinct t.[tw_IdGrupa],  t.[tw_Symbol] , t.[tw_Nazwa], s.st_Stan, t.[tw_JednMiary], c.[tc_CenaNetto7], c.[tc_CenaBrutto7]
from [dbo].[tw__Towar] as t
  join tw_Cena as c ON t.tw_Id = c.tc_Id
 join tw_Stan as s ON t.tw_Id = s.st_TowId  where tw_Rodzaj = 8 AND tw_IdGrupa=1 OR tw_IdGrupa=11 OR tw_IdGrupa=6 OR tw_IdGrupa=4

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9209
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Problem z prawidłowym połączeniem tabel w sql
« Odpowiedź #1 dnia: Styczeń 10, 2021, 16:08:19 »
1.Jeżeli masz więcej niż jeden magazyn to w tabeli tw_stan każdy towar jest tyle razy ile masz magazynów. Dodaj warunek określający magazyn, którego stan Ciebie interesuje lub podaj odpowiednio zsumowany stan.

2. tw_Rodzaj = 8 (1 - towar; 2 - usługa; 4 - opakowanie; 8 - komplet; 16 - opłata)

3. Przy łączeniu różnych operatorów logicznych musisz zadbać o nawiasy
 WHERE tw_Rodzaj = 8 AND tw_IdGrupa=1 OR tw_IdGrupa=11 OR tw_IdGrupa=6 OR tw_IdGrupa=4 oznacza, że chcesz wybrać komplety z grupy 1 lub inny asortyment z grup (11,6,4) niezależnie od rodzaju tego asortymentu.
Może chciałeś raczej napisać:
WHERE tw_Rodzaj = 8 AND (tw_IdGrupa=1 OR tw_IdGrupa=11 OR tw_IdGrupa=6 OR tw_IdGrupa=4)albo ładniej
WHERE tw_Rodzaj = 8 AND tw_IdGrupa IN(1,11,6,4)
4. Używanie DISTINCT w tym przypadku jest błędem - trzeba poprawnie napisać zapytanie.
« Ostatnia zmiana: Styczeń 10, 2021, 16:51:05 wysłana przez birds22 »
Sławek, Zduńska Wola

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: Problem z prawidłowym połączeniem tabel w sql
« Odpowiedź #2 dnia: Styczeń 13, 2021, 22:54:40 »
Dziękuje działa

Forum Użytkownikow Subiekt GT

Odp: Problem z prawidłowym połączeniem tabel w sql
« Odpowiedź #2 dnia: Styczeń 13, 2021, 22:54:40 »