如何在T-SQL中执行此查询

时间:2009-08-28 15:56:28

标签: sql tsql

我有三列A B C的表。

我想从此表中选择*,但按照A列的特定顺序排序。

换句话说,让我们说A列包含“stack”,“over”,“flow”。

我想从这个表中选择*,并按照这个特定的顺序按列A排序:“stack”,“flow”,“over” - 既不是升序也不是降序。

有可能吗?

3 个答案:

答案 0 :(得分:10)

您可以在ORDER BY子句中使用CASE语句。例如......

SELECT *
FROM Table
ORDER BY
   CASE A
      WHEN 'stack' THEN 1
      WHEN 'over' THEN 2
      WHEN 'flow' THEN 3
      ELSE NULL
   END

查看Defining a Custom Sort Order了解详情。

答案 1 :(得分:1)

一些解决方案:

使用您的排序顺序创建另一个表,将A列连接到新表(这将类似于TERM作为STRING,SORTORDER作为INT)。因为事情总是在变化,这避免了硬编码任何东西,并且是我推荐用于现实世界的解决方案。

如果您不希望添加新条款和订单的灵活性,只需使用CASE语句将每个字词转换为数字:

CASE A WHEN 'stack' THEN 1 WHEN 'over' THEN 2 WHEN 'flow' THEN 3 END

并在你的ORDER BY中使用它。

答案 2 :(得分:0)

如果您有很多具有自定义排序的元素,您可以将这些元素添加到表中并为其赋值。加入表格,每列可以有一个自定义订单值。

   select 
      main.a,
      main.b,
      main.c 
   from dbo.tblMain main
   left join tblOrder rank on rank.a = main.a 
   order by rank.OrderValue

如果你的问题中只有3个元素,你可以按顺序使用一个案例......

   select 
      * 
   from dbo.tblMain 
   order by case 
      when a='stack' then 1 
      when a='flow' then 2 
      when a='over' then 3 
      else 4
   end