2009-11-10 84 views
0
SELECT * FROM (SELECT ROW_NUMBER() 
over 
    (
     ORDER BY 
      CASE WHEN @SortExpression ='Country_id' THEN Country_id END, 
      CASE WHEN @SortExpression ='Country_name' THEN Country_name END, 
      CASE WHEN @SortExpression ='Country_region' THEN Country_region END, 
      CASE WHEN @SortExpression ='Country_area' THEN Country_area END, 
      CASE WHEN @SortExpression ='Country_Population' THEN Country_Population END, 
     CASE WHEN @SortExpression ='Country_gdp' THEN Country_gdp END 
    )as num ,* From Country_Profile123) as tbl 
     WHERE num BETWEEN @column AND @column1 

我解决了一半的问题(即分页和排序),现在我想要做的是排序顺序。将查询设置为asc或desc命令?

+1

您的问题是什么?加上这是om mysql,sql-server? – RageZ 2009-11-10 01:18:59

+0

我使用SQL SERVER管理代码。 我想做分页和分页。这是完成..但仍然是排序命令,我想要做.. 所以我想帮助.... – sikender 2009-11-10 01:24:10

回答

1

你在找这样的吗?

SELECT * FROM (SELECT ROW_NUMBER() 
over 
    (
     ORDER BY 
      CASE WHEN @SortExpression ='Country_id' THEN Country_id DESC END, 
      CASE WHEN @SortExpression ='Country_id_asc' THEN Country_id ASC END, 
      CASE WHEN @SortExpression ='Country_name' THEN Country_name DESC END, 
      CASE WHEN @SortExpression ='Country_name_asc' THEN Country_name ASC END, 
      CASE WHEN @SortExpression ='Country_region' THEN Country_region DESC END, 
      CASE WHEN @SortExpression ='Country_region_asc' THEN Country_region ASC END, 
      CASE WHEN @SortExpression ='Country_area' THEN Country_area DESC END, 
      CASE WHEN @SortExpression ='Country_area_asc' THEN Country_area ASC END, 
      CASE WHEN @SortExpression ='Country_Population' THEN Country_Population DESC END, 
      CASE WHEN @SortExpression ='Country_Population_asc' THEN Country_Population ASC END, 
     CASE WHEN @SortExpression ='Country_gdp' THEN Country_gdp DESC END 
     CASE WHEN @SortExpression ='Country_gdp_asc' THEN Country_gdp ASC END 
    )as num ,* From Country_Profile123) as tbl 
     WHERE num BETWEEN @column AND @column1 
+0

是的..我明白了.. thx ... – sikender 2009-11-10 01:41:19

+0

这将无法正常工作。您不能将排序顺序应用于案例中的值,您必须在案例之外将其排序。 – Guffa 2009-11-10 01:44:49

+0

你..我做了..人.. – sikender 2009-11-10 01:53:48

3

使用单case语句,而不是重复相同的case语句为每一个可能值:

SELECT * FROM (
    SELECT ROW_NUMBER() 
    over (
    ORDER BY 
     CASE @SortExpression 
     WHEN 'Country_id' THEN Country_id 
     WHEN 'Country_name' THEN Country_name 
     WHEN 'Country_region' THEN Country_region 
     WHEN 'Country_area' THEN Country_area 
     WHEN 'Country_Population' THEN Country_Population 
     WHEN 'Country_gdp' THEN Country_gdp 
     END 
) as num, * From Country_Profile123 
) as tbl 
WHERE num BETWEEN @column AND @column1 

应用排序顺序是有点棘手。您无法将方向应用于该值,因此您需要具有不同方向的第一手表壳和第二手表壳:

SELECT * FROM (
    SELECT ROW_NUMBER() 
    over (
    ORDER BY 
     CASE @SortExpression 
     WHEN 'Country_id' THEN Country_id 
     WHEN 'Country_name' THEN Country_name 
     WHEN 'Country_region' THEN Country_region 
     WHEN 'Country_area' THEN Country_area 
     WHEN 'Country_Population' THEN Country_Population 
     WHEN 'Country_gdp' THEN Country_gdp 
     ELSE 0 
     END, 
     CASE @SortExpression 
     WHEN 'Country_id_desc' THEN Country_id 
     WHEN 'Country_name_desc' THEN Country_name 
     WHEN 'Country_region_desc' THEN Country_region 
     WHEN 'Country_area_desc' THEN Country_area 
     WHEN 'Country_Population_desc' THEN Country_Population 
     WHEN 'Country_gdp_desc' THEN Country_gdp 
     ELSE 0 
     END DESC 
) as num, * From Country_Profile123 
) as tbl 
WHERE num BETWEEN @column AND @column1 
+0

将数据类型varchar转换为bigint时出错。 这个错误即将到来。当我运行你的查询 – sikender 2009-11-10 16:24:22

+0

@sikender:每个'case'只能处理一种数据类型。每种数据类型都需要一个单独的“case”。 – Guffa 2012-05-25 08:50:32