MS SQL Order BY Case

时间:2010-08-27 10:27:20

标签: sql-server-2005

我有一个包含3列的查询(为了示例)。一个是DATE,一个是[Type],一个是PRODUCT。我需要按日期订购查询,但也要按照Buy之类的名称输入,Transfer In首先显示,然后Transfer OutSell[Type]的顺序对我来说非常重要,因为在这种情况下我甚至在看到Sell相同的产品之前就得到了Buy ...

SELECT [PRODUCT], [DATE], [TYPE]
FROM table_name
ORDER BY [DATE] ASC

有没有办法像那样订购它。名称不是必须按字母顺序排列的。

例如:

洗衣机,20100506,卖
  洗衣机,20100506,购买

我需要购买,然后卖出。但请记住,买入和卖出只是一个例子,它不会被命名为这样,因此按字母顺序排序并不会对此有所帮助。如果可能的话,我希望能够定义Type的顺序。

2 个答案:

答案 0 :(得分:1)

如果你只有一些,你可以将逻辑放在案例陈述中

SELECT [DATE], [TYPE]
FROM table_name
ORDER BY [DATE] ASC, 
   CASE WHEN [Type]  IN (`Buy`,'TransferIn') Then 0 Else 1 End ASC

否则,您可能最好创建一个表格,视图或TVF来映射您可以加入的类型和排序顺序。

答案 1 :(得分:0)

你的意思是这样的:

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

或者这个:

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

MSDN