Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据特定的SQL值对数据进行排序_Sql_Sql Server_Sorting_Tsql - Fatal编程技术网

根据特定的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
值将始终位于末尾,但您也将根据
名称对它们进行排序