and lub where ssql server 2014

0

Dwa zapytania:

SELECT dbo.TblPozyczkiGotowkowe.NrKredytu as Nr , WysokoscKredytu as WysokoscKredytuPrzyznana ,DataPrzyznaniaKredytu as [Data przyznaia kredytu],Sum(Rata) as AktualnaSumaDoSplacenia,splacony,  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM dbo.TblPozyczkiGotowkowe 
left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu  and Anulowane ='Nie' 
group by dbo.TblPozyczkiGotowkowe.NrKredytu ,WysokoscKredytu ,DataPrzyznaniaKredytu,Splacony

oraz

SELECT dbo.TblPozyczkiGotowkowe.NrKredytu as Nr , WysokoscKredytu as WysokoscKredytuPrzyznana ,DataPrzyznaniaKredytu as [Data przyznaia kredytu],Sum(Rata) as AktualnaSumaDoSplacenia,splacony,  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM dbo.TblPozyczkiGotowkowe 
left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu  Where Anulowane ='Nie' 
group by dbo.TblPozyczkiGotowkowe.NrKredytu ,WysokoscKredytu ,DataPrzyznaniaKredytu,Splacony

Jeden select z Where drugi z end.Ten z end daje wynik prawidłowy z null'ami - nie rozumiem tego, mimo ze mam wynik prawidłowy. Może mi ktoś wyjasni..Jest to wycinek z CTE

POz Emeryt JerzyB

1
SELECT 
  dbo.TblPozyczkiGotowkowe.NrKredytu as Nr, 
  WysokoscKredytu as WysokoscKredytuPrzyznana, 
  DataPrzyznaniaKredytu as [Data przyznaia kredytu], 
  Sum(Rata) as AktualnaSumaDoSplacenia, 
  splacony, 
  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu and Anulowane = 'Nie' 
group by 
  dbo.TblPozyczkiGotowkowe.NrKredytu, 
  WysokoscKredytu, 
  DataPrzyznaniaKredytu, 
  Splacony
SELECT 
  dbo.TblPozyczkiGotowkowe.NrKredytu as Nr, 
  WysokoscKredytu as WysokoscKredytuPrzyznana, 
  DataPrzyznaniaKredytu as [Data przyznaia kredytu], 
  Sum(Rata) as AktualnaSumaDoSplacenia, 
  splacony, 
  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu 
Where 
  Anulowane = 'Nie' 
group by 
  dbo.TblPozyczkiGotowkowe.NrKredytu, 
  WysokoscKredytu, 
  DataPrzyznaniaKredytu, 
  Splacony
EmeJERZY napisał(a):

drugi z end.Ten z end

  1. nie End tylko And - to jest jednak zasadnicza różnica
  2. formatuj w jakikolwiek zapytania bo tak tego nie da się czytać
  3. AND obowiązuje na poziomie LEFT JOIN i filtruje tylko rekordy z dołączanej tabeli a WHERE filtruje już po połączeniu i oddziałuje na rekordy ze wszystkich tabel
0
abrakadaber napisał(a):
SELECT 
  dbo.TblPozyczkiGotowkowe.NrKredytu as Nr, 
  WysokoscKredytu as WysokoscKredytuPrzyznana, 
  DataPrzyznaniaKredytu as [Data przyznaia kredytu], 
  Sum(Rata) as AktualnaSumaDoSplacenia, 
  splacony, 
  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu and Anulowane = 'Nie' 
group by 
  dbo.TblPozyczkiGotowkowe.NrKredytu, 
  WysokoscKredytu, 
  DataPrzyznaniaKredytu, 
  Splacony
SELECT 
  dbo.TblPozyczkiGotowkowe.NrKredytu as Nr, 
  WysokoscKredytu as WysokoscKredytuPrzyznana, 
  DataPrzyznaniaKredytu as [Data przyznaia kredytu], 
  Sum(Rata) as AktualnaSumaDoSplacenia, 
  splacony, 
  count(dbo.TblWysokoscRatGotowkowych.idKredytu) as IleRatDoSplacenia 
FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN dbo.TblWysokoscRatGotowkowych ON dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu 
Where 
  Anulowane = 'Nie' 
group by 
  dbo.TblPozyczkiGotowkowe.NrKredytu, 
  WysokoscKredytu, 
  DataPrzyznaniaKredytu, 
  Splacony
EmeJERZY napisał(a):

drugi z end.Ten z end

  1. nie End tylko And - to jest jednak zasadnicza różnica
  2. formatuj w jakikolwiek zapytania bo tak tego nie da się czytać
  3. AND obowiązuje na poziomie LEFT JOIN i filtruje tylko rekordy z dołączanej tabeli a WHERE filtruje już po połączeniu i oddziałuje na rekordy ze wszystkich tabel

Za bledy przepraszam, za wyjasnienie serdecznie dziekuje.Wszyscy dziasiaj na mnie krzycza. Poz JB

1

A sprawdż jeszcze taką "kombinację":

FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN 
  dbo.TblWysokoscRatGotowkowych 
  ON 
    dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu 
    AND Anulowane = 'Nie'
0
Marcin.Miga napisał(a):

A sprawdż jeszcze taką "kombinację":

FROM 
  dbo.TblPozyczkiGotowkowe 
  left JOIN 
  dbo.TblWysokoscRatGotowkowych 
  ON 
    dbo.TblPozyczkiGotowkowe.NrKredytu = dbo.TblWysokoscRatGotowkowych.idKredytu 
    AND Anulowane = 'Nie'
Czesc
Ciekawe. Z grupowaniem efekt jak z  'and'
Poz. JB
0

Ja to 'and' wstawilem przez przyadek i zadzialao jak chciale. Gdzie w necie o tym poczytam
Poz
JB

0

To są podstawy SQL więc w każdym kursie powinno być

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