sql - 如何从存储在MS SQL server表中的以下数据中获取结果集中的以下顺序?

标签 sql sql-server database sql-server-2012

以下是记录最初存储在表中的顺序:

CREATE TABLE Locations
(
Name varchar(255),
Description varchar(255),
Parent varchar(255)
); 

insert into locations values('L1','Parent Locaton1',null); 
insert into locations values('SLC','Sub location B','L1'); 
insert into locations values('L2','Parent Locaton2',null);
insert into locations values('SLY','Sub Location Y','L2');
insert into locations values('SLZ','Sub Location Z','L2');
insert into locations values('SLA','Sub location A','L1'); 
insert into locations values('SLB','Sub location B','L1'); 

原始存储表:

Original Table

要求的输出顺序:

enter image description here

我基本上是在寻找一种没有游标或临时表的解决方案。派生表虽然很好

最佳答案

我不确定为什么@vkp 删除了答案。它似乎对您的数据是正确的,除非您的层次结构中有多个级别:

select l.*
from locations l
order by coalesce(l.parent, l.name), name;

更具体地说,如果您想让父级始终排在第一位,您可能不想依赖名称:

select l.*
from locations l
order by coalesce(l.parent, l.name),
         (case when l.parent is null then 1 else 2 end),
         name;

关于sql - 如何从存储在MS SQL server表中的以下数据中获取结果集中的以下顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202303/

相关文章:

sql - 使用 SQL presto 将类似 dict 的 varchar 列拆分为多个列

sql - ODBC 连接/ Crystal 报告

c# - 使用自连接在 LINQ 中查询

python - 如何在不将整个文件加载到内存的情况下更改大型(60gig)csv 文件的列名?

mysql - 产品、类别和公司之间的数据库关系

c# - C# 中的 Mysql 查询

sql - COUNT(1) OVER() with Linq to Sql

c# - SQL Server 异常 :Timeout expired. 操作完成之前超时时间已过或服务器没有响应

java - hibernate 生成的错误 sql 查询

sql - 我如何在 Firebird 中使用事务?