如何通过两个不同的标准对sql server数据进行排序



在SQL server表中,名为SORT_ORDER_VALUE的列可能包含int值或null。所有具有值的行都应按其顺序排列,而那些具有null值的行应放在具有有效值的行之下,并按product_name的字母顺序排列。我已经通过分配一个高值9999,将那些没有值的值放在SORT_ORDER_value列的底部。但现在我必须按字母顺序订购那些值为9999的。以下是我迄今为止创建的SQL。

SELECT PRODUCT_NAME, PRICE, CASE WHEN SORT_ORDER_VALUE IS NULL THEN 9999 ELSE SORT_ORDER_VALUE 
END FROM PRODUCT ORDER BY  SORT_ORDER_VALUE
SELECT 
PRODUCT_NAME, 
PRICE, 
CASE WHEN SORT_ORDER_VALUE IS NULL THEN 9999 ELSE SORT_ORDER_VALUE END 
FROM PRODUCT 
ORDER BY  
CASE WHEN SORT_ORDER_VALUE IS NULL THEN 9999 ELSE SORT_ORDER_VALUE END, 
PRODUCT_NAME

ORDER BY之后,您可以有一个逗号分隔的列列表,用于排序。

如果两行具有相同的SORT_ORDER_VALUE,则它们将按PRODUCT_NAME进行排序。

编辑:

对于ORDER BY,可以有列名或别名的列表,也可以重复完整的表达式。我更喜欢重复使用完整的表达式,但您也可以编写ORDER BY 3,1(给出要排序的列的位置。

这也可以:

SELECT 
PRODUCT_NAME, 
PRICE, 
ISNULL(SORT_ORDER_VALUE, 9999) AS SORT_ORDER_VALUE
FROM PRODUCT 
ORDER BY  
ISNULL(SORT_ORDER_VALUE, 9999), 
PRODUCT_NAME

最新更新