根据特定的SQL值对数据进行排序
我被一个需求困住了,我尝试了部分代码,但在某种程度上有效,但未能按照我的需求进行排序 要求 如果我有几个按任务分组的行根据特定的SQL值对数据进行排序,sql,sql-server,sorting,tsql,Sql,Sql Server,Sorting,Tsql,我被一个需求困住了,我尝试了部分代码,但在某种程度上有效,但未能按照我的需求进行排序 要求 如果我有几个按任务分组的行 Name RowToBeSorted task1 1 task1 1 task1 1 task2 3 task2 3 task2 3 task3 2 task3 2 task3 2 task4 NULL task4 NULL task4 NULL 这是我的要求,排序顺序应根据我在上面为Ex显示的列编号显示数据组。如果列值
Name RowToBeSorted
task1 1
task1 1
task1 1
task2 3
task2 3
task2 3
task3 2
task3 2
task3 2
task4 NULL
task4 NULL
task4 NULL
这是我的要求,排序顺序应根据我在上面为Ex显示的列编号显示数据组。如果列值显示为8,则该数据应定位在第8排序GroupBy位置,如果列值为5,则该数据集应定位在第5排序GroupBy位置。现在,根据表结构,task3的列值是2,那么组数据应该排序在第二位,而不考虑其他顺序,所以输出应该如下所示
task1 1
task1 1
task1 1
task3 2 <-- positioned at 2nd group by
task3 2 <-- positioned at 2nd group by
task3 2 <-- positioned at 2nd group by
task2 3
task2 3
task2 3
task4 NULL
task4 NULL
task4 NULL
RL_Num是我的排序值
这是我的输出窗口:
更新2:
我发现了你的代码哪里出了问题,谢谢它帮助了我,现在我可以按照你的代码片段进行排序,但是我仍然没有达到我的要求,下面是屏幕截图和说明
如果您看到前3行是正确的,因为排序顺序是1,接下来3行的值是3,因此应该放在空值之后(重命名AED07-19),因为唯一的目标是它与空值或有效值无关,我们只需将这些数据集放在指定的行中。最后一行将位于底部,因为它是不同的任务,并根据名称排序。
所以输出应该是这样的
RowsToBeSorted
1
1
1
NULL <-- This position is irrelevant to me
NULL <-- This position is irrelevant to me
NULL <-- This position is irrelevant to me
3 <-- since value is 3rd position
3 <-- since value is 3rd position
3 <-- since value is 3rd position
NULL <-- This position is irrelevant to me
RowsToBeSorted
1.
1.
1.
空尝试以下方法:
DECLARE @DataSource TABLE
(
[Name] VARCHAR(12)
,[RowToBeSorted] INT
);
INSERT INTO @DataSource ([Name], [RowToBeSorted])
VALUES ('task1', 1)
,('task1', 1)
,('task1', 1)
,('task2', 3)
,('task2', 3)
,('task2', 3)
,('task3', 2)
,('task3', 2)
,('task3', 2)
,('task4', NULL)
,('task4', NULL)
,('task4', NULL);
SELECT *
FROM @DataSource
ORDER BY CASE WHEN [RowToBeSorted] IS NULL THEN 1 ELSE 0 END
,[RowToBeSorted]
,[Name];
首先要检查行tobesorted是否为NULL
-如果“是”,我们将返回1
,否则0
-这样,NULL
值将始终位于末尾,但您也将根据名称对它们进行排序。尝试以下操作:
DECLARE @DataSource TABLE
(
[Name] VARCHAR(12)
,[RowToBeSorted] INT
);
INSERT INTO @DataSource ([Name], [RowToBeSorted])
VALUES ('task1', 1)
,('task1', 1)
,('task1', 1)
,('task2', 3)
,('task2', 3)
,('task2', 3)
,('task3', 2)
,('task3', 2)
,('task3', 2)
,('task4', NULL)
,('task4', NULL)
,('task4', NULL);
SELECT *
FROM @DataSource
ORDER BY CASE WHEN [RowToBeSorted] IS NULL THEN 1 ELSE 0 END
,[RowToBeSorted]
,[Name];
首先要检查行tobesorted是否为NULL
——如果“是”,我们将返回1
,否则返回0
——这样,NULL
值将始终位于末尾,但您也将根据名称对它们进行排序