Sql server 排序SQL表

Sql server 排序SQL表,sql-server,tsql,sorting,Sql Server,Tsql,Sorting,有人能帮我用T-SQL对这个表进行排序吗 ID Comment ParentId -- ------- -------- 3 t1 NULL 4 t2 NULL 5 t1_1 3 6 t2_1 4 7 t1_1_1 5 像这样 ID Comment ParentId -- ------- -------- 3 t1 NULL 5 t1_1 3 7 t1_1_1 5 4 t2

有人能帮我用T-SQL对这个表进行排序吗

ID  Comment  ParentId
--  -------  --------
3   t1       NULL
4   t2       NULL
5   t1_1     3
6   t2_1     4
7   t1_1_1   5
像这样

ID  Comment  ParentId
--  -------  --------
3   t1       NULL
5   t1_1     3
7   t1_1_1   5
4   t2       NULL
6   t2_1     4
亲切问候,

Lennart

试试这个:

DECLARE @YourTable table (id int, Comment varchar(10), parentID int)

INSERT INTO @YourTable VALUES (3,       't1'    ,  NULL)
INSERT INTO @YourTable VALUES (4,       't2'    ,  NULL)
INSERT INTO @YourTable VALUES (5,       't1_1'  ,  3)
INSERT INTO @YourTable VALUES (6,       't2_1'  ,  4)
INSERT INTO @YourTable VALUES (7,       't1_1_1',  5)


;with c as
(
    SELECT id, comment, parentid, CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),id),10)) as SortBy
    from @YourTable
    where parentID IS NULL
    UNION ALL
    SELECT y.id, y.comment, y.parentid, LEFT(c.SortBy+CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),y.id),10)),8000) AS SortBy
    FROM c
    INNER JOIN @YourTable y ON c.ID=y.PArentID

)
select * from C ORDER BY SortBy
编辑
这是输出

id          comment    parentid    SortBy
----------- ---------- ----------- ---------------------------------
3           t1         NULL        0000000003
5           t1_1       3           00000000030000000005
7           t1_1_1     5           000000000300000000050000000007
4           t2         NULL        0000000004
6           t2_1       4           00000000040000000006

(5 row(s) affected)
试试这个:

DECLARE @YourTable table (id int, Comment varchar(10), parentID int)

INSERT INTO @YourTable VALUES (3,       't1'    ,  NULL)
INSERT INTO @YourTable VALUES (4,       't2'    ,  NULL)
INSERT INTO @YourTable VALUES (5,       't1_1'  ,  3)
INSERT INTO @YourTable VALUES (6,       't2_1'  ,  4)
INSERT INTO @YourTable VALUES (7,       't1_1_1',  5)


;with c as
(
    SELECT id, comment, parentid, CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),id),10)) as SortBy
    from @YourTable
    where parentID IS NULL
    UNION ALL
    SELECT y.id, y.comment, y.parentid, LEFT(c.SortBy+CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),y.id),10)),8000) AS SortBy
    FROM c
    INNER JOIN @YourTable y ON c.ID=y.PArentID

)
select * from C ORDER BY SortBy
编辑
这是输出

id          comment    parentid    SortBy
----------- ---------- ----------- ---------------------------------
3           t1         NULL        0000000003
5           t1_1       3           00000000030000000005
7           t1_1_1     5           000000000300000000050000000007
4           t2         NULL        0000000004
6           t2_1       4           00000000040000000006

(5 row(s) affected)
哼哼点菜

哼唱订购人


这听起来很像一个家庭作业问题,但这里有一些关于如何解决这个问题的提示:

您需要在google或StackOverflow上快速搜索ORDERBY子句,以便能够获得一组按您要使用的列(即“注释”列)排序的结果。 一旦得到了这些,就可以开始编写SQL语句来对结果进行排序


如果需要对实际表重新排序(而不仅仅是按特定顺序获取结果),则需要使用临时表进行查找(尝试搜索“DECLARE table”)。与任何临时交换非常相似,您可以将结果放在临时位置,删除旧数据,然后用临时数据替换表内容,但这一次是按照您想要的顺序进行的。

这听起来很像一个家庭作业问题,但这里有一些关于如何处理的提示:

您需要在google或StackOverflow上快速搜索ORDERBY子句,以便能够获得一组按您要使用的列(即“注释”列)排序的结果。 一旦得到了这些,就可以开始编写SQL语句来对结果进行排序


如果需要对实际表重新排序(而不仅仅是按特定顺序获取结果),则需要使用临时表进行查找(尝试搜索“DECLARE table”)。与任何临时交换非常相似,您可以将结果放在临时位置,删除旧数据,然后用临时数据替换表内容,但这一次是按您想要的顺序进行的。

但仅按注释排序就可以了?还是我没抓住重点

declare @table table
(
    Comment varchar(10)
)

insert into @table (Comment) values ('t1')
insert into @table (Comment) values ('t2')
insert into @table (Comment) values ('t1_1')
insert into @table (Comment) values ('t2_1')
insert into @table (Comment) values ('t1_1_1')

select * from @table order by comment

但仅仅是按评论排序就可以得到这样的结果吗?还是我没抓住重点

declare @table table
(
    Comment varchar(10)
)

insert into @table (Comment) values ('t1')
insert into @table (Comment) values ('t2')
insert into @table (Comment) values ('t1_1')
insert into @table (Comment) values ('t2_1')
insert into @table (Comment) values ('t1_1_1')

select * from @table order by comment

我认为OP想要的结果是用ID和ParentID排序的,其中一个简单的ORDER BY不起作用我认为OP想要的结果是用ID和ParentID排序的,其中一个简单的ORDER BY不起作用为什么否决票?一个简单的排序依据将不起作用,除非您的注释栏总是被输入,以便您可以使用它进行排序,这是不可能的。我认为OP想要使用ID和ParentID,并以此进行排序。我提供了完整的工作示例代码,OP说“谢谢,它工作了”,我仍然得到了两张反对票,没有任何理由说明原因。谢谢为什么要投反对票?一个简单的排序依据将不起作用,除非您的注释栏总是被输入,以便您可以使用它进行排序,这是不可能的。我认为OP想要使用ID和ParentID,并以此进行排序。我提供了完整的工作示例代码,OP说“谢谢,它工作了”,我仍然得到了两张反对票,没有任何理由说明原因。谢谢我认为OP在其示例数据中为注释列选择了值,以表示他们试图按ID和父ID排序。我怀疑他们是否真的在“按注释排序”解决方案。我认为OP在其示例数据中为注释列选择了值,以表示他们试图按ID和父ID进行排序。我怀疑他们是否真的需要“按注释排序”解决方案。