有人知道如何优化这样的查询吗?如何将其封装到一个查询中?
,(SELECT top 1 WFD_AttDecimal2 as Nocleg
FROM WFElements INNER JOIN
WFElementDetails ON WFElements.WFD_ID = WFElementDetails.DET_WFDID
Where
WFD_STPID = @KrokSlownikUdostepnionyKraj
and dbo.ClearWFElemID (WFD_AttChoose20) = KrajDoDiety6 -- id kraju
and dbo.ClearWFElemID (WFD_AttChoose9) = @Spolka) as NoclegStawka7
,(SELECT top 1 WFD_AttDecimal3 as NoclegPrzelicznik
FROM WFElements INNER JOIN
WFElementDetails ON WFElements.WFD_ID = WFElementDetails.DET_WFDID
Where
WFD_STPID = @KrokSlownikUdostepnionyKraj
and dbo.ClearWFElemID (WFD_AttChoose20) = KrajDoDiety6 -- id kraju
and dbo.ClearWFElemID (WFD_AttChoose9) = @Spolka) as NoclegPrzelicznik7
,PelneDoby6 * (select MinDieta from @MinDieta where RodzajDelegacji = KrajZagr6) as MinIloscDiet7
from @Dieta4发布于 2022-06-30 08:32:55
您可以使用OUTER APPLY或CROSS APPLY并在其中选择所有必要的列,然后可以访问SELECT中的所有列。
SELECT
wfd.Nocleg as NoclegStawka7
, wfd.NoclegPrzelicznik as NoclegPrzelicznik7
, d.PelneDoby6 * (select md.MinDieta from @MinDieta md where RodzajDelegacji = KrajZagr6) as MinIloscDiet7
from @Dieta4 d
OUTER APPLY (
SELECT TOP (1)
WFD_AttDecimal2 as Nocleg,
WFD_AttDecimal3 as NoclegPrzelicznik
FROM WFElements INNER JOIN
WFElementDetails ON WFElements.WFD_ID = WFElementDetails.DET_WFDID
Where
WFD_STPID = @KrokSlownikUdostepnionyKraj
and dbo.ClearWFElemID (WFD_AttChoose20) = KrajDoDiety6 -- id kraju
and dbo.ClearWFElemID (WFD_AttChoose9) = @Spolka
) wfd;另请注意:
,
ClearWFElemID的用法,因为它可能很慢。使用联接或表值函数代替.没有
TOP (1)的ORDER BY是一种代码味:每次都可能得到不同的结果。https://stackoverflow.com/questions/72812515
复制相似问题