存储过程如何选择存储过程中唯一的记录
alter PROCEDURE [dbo].[Get_ProductsByCategoryId_Filter]
@CategoryId int,
@BrandId int,
@PageSize int,
@PageIndex int
AS
SET NOCOUNT ON
DECLARE @ParamDefinition AS NVARCHAR(2000)
DECLARE @sql nvarchar(4000)
SET @sql = 'select DISTINCT ProductId, Name, Description,ProductPriceId,Price,Size,Weight,ThumbnailFilename,BrandId,DeliveryId,CategoryId,HasFreeWrapping,IsPharmaceutical,BrandCategoryId,Enabled,OpenForOffer,FreeDeliveryInUK,Discontinued,EnforceStockCount,OnlyInUK,ShowPreOrderButton,MinPrice
from (SELECT P.[ProductId], P.[Name], P.[Description],PP.[ProductPriceId],PP.[Price],PP.[Size],PP.[Weight], M.[ThumbnailFilename],M.[MEDIAFILENAME], P.[BrandId], P.[DeliveryId], P.[CategoryId], P.[HasFreeWrapping], P.[IsPharmaceutical], P.[BrandCategoryId], P.[Enabled], P.[OpenForOffer], P.[FreeDeliveryInUK],
P.[Discontinued], P.[EnforceStockCount], P.[OnlyInUK], P.[ShowPreOrderButton], MIN(ISNULL(PP.[Price], 0)) AS [MinPrice],
ROW_NUMBER() OVER (Order By P.ProductId asc) AS
RowRank
FROM [Products] P WITH (NOLOCK)
LEFT JOIN [ProductPrices] PP WITH (NOLOCK) ON PP.[ProductId] = P.[ProductId]
INNER JOIN [ProductCategory] PC WITH (NOLOCK) ON P.[ProductId] = PC.[ProductId]
INNER JOIN [Categories] C WITH (NOLOCK) ON C.[CategoryId] = PC.[CategoryId]
inner join [Brands] b WITH (NOLOCK) ON P.[brandid]= b.[brandid]
inner join [ProductMedia] m with (NOLOCK) ON P.[PRODUCTID]= M.[PRODUCTID]
WHERE 1 = 1 AND P.Enabled = 1 AND P.Discontinued = 0 AND PP.Stock > 0 AND (C.[CATEGORYID][email protected] or @CategoryId=0) AND (P.[BRANDID][email protected] or @BrandId is null)
AND M.PRODUCTMEDIAID = (SELECT DISTINCT TOP 1 PRODUCTMEDIAID FROM PRODUCTMEDIA WHERE PRODUCTMEDIA.PRODUCTID= P.PRODUCTID)
GROUP BY P.[ProductId], P.[Name], P.[Description],PP.[ProductPriceId],PP.[Price],PP.[Size],PP.[Weight], M.[ThumbnailFilename],M.[MEDIAFILENAME], P.[BrandId],B.[BrandId], P.[DeliveryId], P.[CategoryId], P.[HasFreeWrapping], P.[IsPharmaceutical], P.[BrandCategoryId], P.[Enabled], P.[OpenForOffer], P.[FreeDeliveryInUK], P.[Discontinued], P.[EnforceStockCount], P.[OnlyInUK], P.[ShowPreOrderButton]
) AS ProductsWithRowNumbers
WHERE
RowRank > ' + CONVERT(nvarchar(10), @PageIndex) +
' AND RowRank <= (' + CONVERT(nvarchar(10),
@PageIndex) + ' + '
+ CONVERT(nvarchar(10), @PageSize) + ') '
SET @ParamDefinition = '@CategoryId int,@BrandId int, @PageSize int,
@PageIndex int
'
-- Execute the SQL query
EXEC sp_executesql @sql, @ParamDefinition,
@CategoryId,
@BrandId,
@PageSize ,
@PageIndex
--
GO
在上面的存储过程的结果,我得到重复的记录,但我不希望显示重复的记录,请帮助我如何我可以得到吗
为什么地球上您使用动态SQL?这绝对没有必要...... –
根据我所需要的应用要求,可以请你帮我从这个@ marc_s – user3166404
获得独特的记录(没有重复的记录)我在产品ID上使用了独特但仍然我得到了重复记录,请帮我解决这个问题@marc_s – user3166404