sql-server - 选择不同并按顺序排序

标签 sql-server sql-server-2005 tsql sql-order-by distinct

如果我放置 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/

相关文章:

sql - 如何在单个 SELECT 语句中拥有多个公用表表达式?

sql-server - 如果我在插入失败后选择 SCOPE_IDENTITY() 会发生什么(SQL Server 2005)

sql-server-2005 - BOL 中的 BREAK 描述

sql-server - 如何从字符串中删除所有空格?

sql - 分组总和()按灵活间隔分区

sql - 如何在sql server中创建依赖于其他列的默认约束

sql-server - 递归 CTE 来分割日期范围

sql-server - SQL Server 兼容级别不起作用

SQL Server : merging multiple colums into 1 column

sql - 在所有表上禁用外键约束不起作用