Poniższe zapytanie daje mi średnią sprawę, gdy quotestatusid = 6, ale mam problemy z skojarzeniem średniej kolumny ulicznej. Cotectable. QuoteID Quotestateid ProjectManager_userid ...

1
Nebelz Cheez 15 marzec 2021, 02:37

2 odpowiedzi

Najlepsza odpowiedź

I myślę nie potrzebujesz sub-query. Just avg jako część masz i użyj group by, aby zapewnić odrębnych użytkowników i adresów.

select U.UserID, U.fname, U.lname, U.JobTitle, A.Street
    , avg(case when Q1.QuoteStatusID = 6 then 1.0 else 0 end) as QuoteAccept
from [User] U 
inner join Quote Q on Q.ProjectManager_UserID = U.UserID
inner join [Address] A on A.AddressID = Q.Shipping_AddressID
group by U.UserID, U.fname, U.lname, U.JobTitle, A.Street
order by AcceptanceRate desc;

Uwaga: Krótkie aliasy sprawiają, że zapytanie jest bardziej czytelne. I nie potrzebujesz klauzuli where, ponieważ połączenie na Quote już zapewnia ten sam stan.

1
Dale K 14 marzec 2021, 23:53

Czy możesz po prostu zmienić swój AVG

select avg(case when QuoteStateID = 6 then 1.0 else 0 end) over(partition by Shipping_AddressId) as QuoteAccept

edytuj Aby nadal używać jako podzewności, będzie potrzebował korelacji w klauzuli gdzie Shipping_AddressId

1
sTTu 15 marzec 2021, 00:15