Problem z aliasem w zapytaniu

Problem z aliasem w zapytaniu
MT
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam! Mam problem z poniższym zapytaniem. Podzapytaniem zwracam idKontrahenta (z trzech tabel) i używam aliasu "idKontrahenta". Chciałbym teraz wyświetlić skrótKH z tabeli Kontrahenci ale wyskakuje błąd w ostatniej linijce (podkreśla mi idKontrahenta). Czy ktoś może mnie oświecić jaki robię błąd? Dlaczego nie działa ten alias?

SELECT idTowaru, skrót, nazwaTW,
COALESCE((SELECT SUM(ilośćWolnej) AS Expr1 FROM PozycjeDostawy AS p
WHERE (idTowaru = t.idTowaru)), 0) AS stanMG,
COALESCE((select cena from PozycjeDostawy
where idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
idTowaru = t.idTowaru)),0 ) as ostCena,

(COALESCE(( select kontrahent from DokumentyZakupu where idDokumentu = (select idDokumentu from PozycjeDostawy where
idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
idTowaru = t.idTowaru))),0)+
COALESCE(( select kontrahent from DokumentyWNT where idDokumentu = (select idDokumentu from PozycjeDostawy where
idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
idTowaru = t.idTowaru))),0)+
COALESCE(( select kontrahent from DokumentyFWAL where idDokumentu = (select idDokumentu from PozycjeDostawy where
idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
idTowaru = t.idTowaru))),0)) ** AS idKontrahenta, skrótKH**

FROM Towary AS t inner join Kontrahenci ON
idKontrahenta = Kontrahenci.idKh

A1
  • Rejestracja: dni
  • Ostatnio: dni
0
Mario_Tychy80 napisał(a):

FROM Towary t inner join Kontrahenci ON

spróbuj bez 'AS'

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

W momencie łączenia tabel przez JOIN idKontrahenta JESZCZE nie jest znane - obliczasz je dopiero w SELECT.

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

tak na szybko

Kopiuj
SELECT 
*
FROM
(
SELECT        idTowaru, skrót, nazwaTW, 
COALESCE((SELECT SUM(ilośćWolnej) AS Expr1 FROM PozycjeDostawy AS p
WHERE        (idTowaru = t.idTowaru)), 0) AS stanMG,
COALESCE((select cena from PozycjeDostawy
where idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
 idTowaru = t.idTowaru)),0 ) as ostCena, 

(COALESCE(( select kontrahent from DokumentyZakupu where idDokumentu = (select idDokumentu from PozycjeDostawy where
 idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
 idTowaru = t.idTowaru))),0)+
 COALESCE(( select kontrahent from DokumentyWNT where idDokumentu = (select idDokumentu from PozycjeDostawy where
 idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
 idTowaru = t.idTowaru))),0)+
 COALESCE(( select kontrahent from DokumentyFWAL where idDokumentu = (select idDokumentu from PozycjeDostawy where
 idPozycji = (select MAX(idPozycji) from PozycjeDostawy where
 idTowaru = t.idTowaru))),0)) AS idKontrahenta, skrótKH

FROM Towary AS t) X inner join Kontrahenci ON
X.idKontrahenta = Kontrahenci.idKh

PS cos zakrecone to zapytanie.
PS2. Przerob to na
CROSS APPLY i funkcje inline valued function jesli masz SQL Server od 2008 w gore.

MT
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki za pomoc! Crowa po małym liftingu Twoje zapytanie zwraca to co potrzebuję. Dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.