2014年5月13日 星期二

[SQL] order by case 排序

  1. --生成OrderTest
  2. DROP TABLE OrderTest
  3. WITH TEST(N, VAL)
  4. AS
  5. (
  6.         SELECT 1 N
  7.                 ,CAST('A' AS VARCHAR) VAL
  8.         UNION ALL
  9.         SELECT N+1
  10.                 ,CAST(SUBSTRING('ABCDE', N+1, 1) AS VARCHAR)
  11.         FROM TEST
  12.         WHERE N<5
  13. )
  14. SELECT * INTO OrderTest
  15. FROM TEST

  16. --排序12354
  17. SELECT N
  18. FROM OrderTest
  19. ORDER BY --越小越前面
  20.         --區域前 (123)(45)
  21.         CASE WHEN n>3 THEN 1 ELSE 0 END
  22.         --區預後 (123)(54)
  23.         CASE WHEN n>3 THEN 0-N ELSE N END
  24. --CBADE
  25. SELECT val
  26. FROM OrderTest
  27. ORDER BY
  28.         --分類(abc)(de)
  29.         CASE WHEN n>3 THEN 1 ELSE 0 END        
  30.         --到轉(cba)(de)
  31.         ,CASE WHEN n<4 THEN 0-N ELSE N END
  32.        
  33. --cbade
  34. SELECT val
  35. FROM OrderTest
  36. ORDER BY
  37.         --分兩類
  38.         --case when val in ('D','E') THEN 1 ELSE 0 END
  39.         --排序
  40.         CASE WHEN val < 'D' THEN
  41.                 ROW_NUMBER() OVER(ORDER BY val DESC)
  42.                 ELSE ROW_NUMBER() OVER(ORDER BY val ASC) END

沒有留言:

張貼留言