我目前工作的一个存储过程TSQL的SQL Server 2014上,我需要编写一个查询由不同StatusIds订购的项目清单。TSQL ORDER BY子句几个
表项目:
专案编号
标签
ProjectDataId
表ProjectData的:
ProjectDataId
StatusId
钽竹叶提取项目通过链接到ProjectData的 ProjectDataId。
演示数据表项目:
ProjectId | Label | ProjectDataId |
------------+-------+----------------+
1 | Pro22 | 2 |
2 | Pro54 | 3 |
3 | Pro87 | 4 |
4 | Pro77 | 5 |
5 | Pro28 | 6 |
演示数据表ProjectData的:
ProjectDataId | StatusId |
----------------+-------------+
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 4 |
我现在的结果是这样的:
ProjectId | Label | StatusId |
------------+-------+-------------+
1 | Pro22 | 1 |
2 | Pro54 | 2 |
3 | Pro87 | 3 |
4 | Pro77 | 4 |
5 | Pro28 | 4 |
我当前的查询看起来是这样的:
SELECT ROW_NUMBER() OVER(ORDER BY StatusId ASC) AS [RowNumber], *
FROM (SELECT DISTINCT
[P].ProjectId
, [P].Label
, [PD].StatusId
, [P].ProjectDataId
FROM [MySchema].[Project] [P]
INNER JOIN [MyProject].[ProjectData] [PD]
ON [PD].ProjectDataId = [P].ProjectDataId) dt
此查询的工作原理是statusId递增1,2,3,4订单,但不使其statusId 1,2的正确顺序,,3
实际上,所需的输出应该是:
ProjectId | Label | StatusId |
------------+-------+-------------+
1 | Pro22 | 1 |
2 | Pro54 | 2 |
4 | Pro77 | 4 |
5 | Pro28 | 4 |
3 | Pro87 | 3 |
因此,我需要改变我的排序查询来实现这一目标。
我的问题,你知道如何解决这个问题呢?要按状态或多或少动态点菜吗?
谢谢!
4是唯一失序的状态吗?或者是否有更新的状态需要更改? - 根据当前系统的需求和刚性,有很多方法可以做到这一点。 – theo
排序顺序背后的基本原理是什么?你还没有告诉我们**为什么**这个顺序是需要的,所以我们不能告诉你在查询中如何实现。 – Will
目前,4是唯一的 - 但我认为在未来可能会出现一些其他:) – TimHorton