如果日期相同,如何更改订单

时间:2015-12-15 10:15:46

标签: sql sql-server-2008

查询是按日期和访问类型排序。

如果同一日期有两种不同类型的访问,则应更改订单。

查询:

SELECT * FROM Visits v
Order by 
v.visitdate ,
,CASE
 WHEN v.[VisitType] = 6 THEN 1
 WHEN v.[VisitType] = 5 THEN 2
 WHEN v.[VisitType] = 3 THEN 3
 WHEN v.[VisitType] = 4 THEN 4
 WHEN v.[VisitType] = 2 THEN 5
 WHEN v.[VisitType] = 1 THEN 6
END

在以下示例中,在同一日期11月05日有两种不同类型的访问。

+-------------+--------+
|    Date     |  Type  |
+-------------+--------+
| 30-Oct-2015 | 2      |
| 30-Oct-2015 | 2      |
| 04-Nov-2015 | 1      |
| 05-Nov-2015 | 2      |
| 05-Nov-2015 | 1      |
+-------------+--------+

所以最后两行的顺序应该是另一种方式。现在我需要担心类型1和2,休息将保持相同的顺序。

+-------------+--------+
|    Date     |  Type  |
+-------------+--------+
| 30-Oct-2015 | 2      |
| 30-Oct-2015 | 2      |
| 04-Nov-2015 | 1      |
| 05-Nov-2015 | 1      |
| 05-Nov-2015 | 2      |
+-------------+--------+

只是想知道是否可以这样做。

2 个答案:

答案 0 :(得分:1)

你写过:

Visit = 1 Status = 2

并且您希望按日期和访问类型排序,在访问之前需要的位置,然后是状态。所以,以简单的方式......

试试这个:

SELECT * FROM Visits v
Order by 
v.visitdate, v.visitType

答案 1 :(得分:0)

虽然您的查询中缺少Type,但我的建议如下:

SELECT *
FROM Visits v
ORDER BY VisitDate ASC
    ,CASE 
        WHEN v.[VisitType] = 6 THEN 1
        WHEN v.[VisitType] = 5 THEN 2
        WHEN v.[VisitType] = 3 THEN 3
        WHEN v.[VisitType] = 4 THEN 4
        WHEN v.[VisitType] = 2 THEN 5
        WHEN v.[VisitType] = 1 THEN 6
    END DESC

以下是SQLFiddle with how the code works on your sample data示例。

您的CASE中不需要复杂的ORDER BY语句,以便以此格式显示数据。有更简单的方法。