如果我放置 DISTINCT 关键字,我会收到错误,否则它工作正常。
错误:消息 145,级别 15,状态 1,过程 SP_Products_GetList,第 15 行 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中。
ALTER PROCEDURE [dbo].[SP_Products_GetList]
@CatID int,
@CatName int,
@IsNew bit,
@InActive bit,
@SortBy varchar(50),
@SortType varchar(50)
AS
SELECT DISTINCT Products.ProductID, ProductName, MAX(Price) Price, PriceID, [Description], Size, IsNew, InActive FROM (SELECT * FROM Products WHERE (@InActive is null or @InActive = InActive ) AND ( @IsNew is null or @IsNew = IsNew )) Products
INNER JOIN ProductCategory
on Products.ProductID = ProductCategory.ProductID
INNER JOIN (
SELECT * FROM Categories
WHERE
( @CatID is null or @CatID = CatID ) and
( @CatName is null or @CatName = CatName )
) Categories
on ProductCategory.CatID = Categories.CatID
INNER JOIN (
SELECT Prices.ProductID, Prices.Price, Prices.PriceID, Prices.SizeID FROM Prices
INNER JOIN (
SELECT ProductID, max(Price) Price from Prices WHERE PriceID IN
( SELECT MAX(PriceID) FROM Prices
GROUP BY ProductID , SizeID)
GROUP BY ProductID ) Prices_
ON Prices.ProductID = Prices_.ProductID AND Prices.Price = Prices_.Price
) as Prices
on Prices.ProductID = Products.ProductID
inner join Sizes
on Sizes.SizeID = Prices.SizeID
GROUP BY ProductName, CatName, Products.ProductID, Price, PriceID, [Description] ,Size, IsNew,InActive
ORDER BY
CASE @SortType
WHEN 'desc' THEN
CASE @SortBy
WHEN 'ProductName' THEN ProductName
END
END
DESC,
CASE @SortType
WHEN 'desc' THEN
CASE @SortBy
WHEN 'ProductID' THEN Products.ProductID
WHEN 'Price' THEN Price
END
END
DESC,
CASE @SortType
WHEN 'asc' THEN
CASE @SortBy
WHEN 'ProductName' THEN ProductName
END
END
ASC,
CASE @SortType
WHEN 'asc' THEN
CASE @SortBy
WHEN 'ProductID' THEN Products.ProductID
WHEN 'Price' THEN Price
END
END
ASC
最佳答案
如果你这样做会发生什么......
SELECT ProductID, ProductName...
FROM (
SELECT DISTINCT Products.ProductID, ProductName...
) AS OrderProduct
ORDER BY [your order code...]
关于sql-server - 选择不同并按顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439886/