0
就像下面使用ROW_NUM(),並使用從窗函數過濾值在那裏我有存儲procedure.SELECT聲明CLAUSE查詢
select
*, row_number() OVER (ORDER BY ProductRN.ID) as RNN
from (
SELECT
p.ID
,p.ProductCode
,p.ProductNameF
,p.ProductNameE
,p.[Weight]
,p.PackageTypeID
,p.ISForeign
,p.BrandID
,b.BrandNameF
,b.BrandNameE
,p.ImgID
,p.CategoryID
,p.AmountInBox
,pc.PropertyGroupID
,p.Comment
,p.CompanyID
,p.Status
,po.CompanyNameF
,PriceConsumer=MKT.Fn_GetProductPrice(1,p.ID, @CurDate)
,PriceRetail=MKT.Fn_GetProductPrice(2,p.ID, @CurDate)
,PriceWholesale=MKT.Fn_GetProductPrice(3,p.ID, @CurDate)
,pg.PropertyName as PropertyGroupName
,b.LogoID
from mkt.Product as p (nolock)
inner join mkt.ProductCategory as pc (nolock) on pc.ID = p.CategoryID
inner join mkt.Brand b (nolock) on p.BrandID=b.ID
inner join MKT.ProductOwner as po (nolock) on po.ID = b.BrandOwnerID
left join MKT.PropertyGroup as pg (nolock) on pc.PropertyGroupID=pg.ID
) AS ProductRN
where [email protected]
and ProductRN.Status=1
and [email protected]
AND ([email protected] OR @BrandID=0)
--SOME WAY TO FILTER RNN
end
沒有任何方式,使用WHERE子句因爲我們可以RNN列在WHERE子句中使用列別名和窗口函數。 實際問題是,當我把
row_number() OVER (ORDER BY ProductRN.ID) as RNN
內的SELECT語句中,RNN列正好相等p.ID(Product.ID)似乎SQL服務器首先計算ROW_NUMBER(),然後執行WHERE子句。
如何更改此查詢,以便row_num()適用於最終查詢記錄 ,我可以在WHERE CLAUSE中對其進行過濾。
它的工作原理。 非常感謝。但劑量使用多個嵌套選擇語句使查詢變慢?有沒有什麼快捷方式? –
@MahdiYusefi。 。 。不,SQL Server有一個好的優化器。 –