Установить запрос ниже в порядке asc или desc? - PullRequest
0 голосов
/ 10 ноября 2009
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

Я решил половину проблемы (это разбиение по страницам и сортировка), сейчас я пытаюсь выполнить порядок сортировки.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Используйте один оператор 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
1 голос
/ 10 ноября 2009

Вы ищете что-то подобное?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...