在SQL中如何通过列值获取父级相关值
我使用 SQL Server 2005 及最低版本。
我有一个如下所示的 SQL Server 表结构:
ID Name ParentID
-----------------------
1 Root NULL
2 Business 1
3 Finance 1
4 Stock 3
我想编写一个查询,当用户给出输入 ID=1 时,然后在此处显示此输出:
ID Name ParentName
-------------------------
1 Root -
2 Business Root
3 Finance Root
4 Stock Finance
当用户给出输入 ID=3 时,在此处显示此输出:
ID Name ParentName
-------------------------
3 Finance Root
1 Root -
4 Stock Finance
当用户给出输入 ID=4 时然后显示此输出:
ID Name ParentName
-------------------------
4 Stock Finance
3 Finance Root
1 Root -
提前致谢。如果有任何疑问请询问。谢谢大家
I work on SQL Server 2005 and lowest.
I have a SQL Server table structure like below:
ID Name ParentID
-----------------------
1 Root NULL
2 Business 1
3 Finance 1
4 Stock 3
I want to write a query, when user give input ID=1 then show this output here:
ID Name ParentName
-------------------------
1 Root -
2 Business Root
3 Finance Root
4 Stock Finance
When user gives input ID=3 then show this output here:
ID Name ParentName
-------------------------
3 Finance Root
1 Root -
4 Stock Finance
When user give input ID=4 then show this output:
ID Name ParentName
-------------------------
4 Stock Finance
3 Finance Root
1 Root -
Thanks in advance. If have any query plz ask. thanks for all
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
显然将
tableName
替换为您的表格。如果您愿意,添加
t2.ID
到选择列表以查看匹配。Replace
tableName
obviously with your table.Add
t2.ID
to select list to view match up if you like.以下是对 marc_s 答案的修改:
Here's modification to marc_s' answer:
这两个递归 CTE(通用表表达式)将从树中的给定节点向下选择层次结构,并从该节点向上选择树回到根。由于它是 CTE,因此它可以在 SQL Server 2005 及更高版本中工作,但不幸的是,在 SQL Server 2000 中不能。
设置
@StartID = 1
将为您提供以下输出:设置
@StartID = 3
将为您提供以下输出:These two recursive CTE's (Common Table Expression) will select the hierarchy from a given node on down in your tree, and also from that node up the tree back to the root. Since it's a CTE, it will work in SQL Server 2005 and newer - but not in SQL Server 2000, unfortunately.
Setting
@StartID = 1
will give you this output:Setting
@StartID = 3
will give you this output:我有一个类似的答案 - 但构建它后我想发布它;)
@Data 代表示例数据,@UserInput 是输入变量。
我添加了 RecordType 来阐明记录部分的含义。
它在 SQL Server 2008 上进行了测试,应该可以在 2005 上运行,但不能在 2000 上运行。
I have a similar answer - but having built it I want to post it ;)
@Data represent the sample data, @UserInput is the input variable.
I added a RecordType to clarify the meaning of the record parts.
It is tested on SQL Server 2008 and should work on 2005 - but not on 2000.