SQL Server 2005 中的分层查询

2024-06-24

早在我在 Oracle 商店工作时,我就认为 CONNECT_BY 是理所当然的。现在我一直在使用 SQL Server 2005,并且有一些令人讨厌的对象层次结构。具体来说,我们有一个自引用表,其中所有子记录都有一个包含其父记录 ID 的列。目前,我们有一个将子级映射到层次结构中的级别的视图,以及一个令人讨厌的查询,该查询负责将父母与孩子联系起来。虽然这种方法有效,但它远非优雅,而且充满了污点。我只是好奇其他人如何从 SQL Server 2005 检索分层数据。


这将创建典型的层次结构表,并使用 CTE 选择层次结构并为每个项目创建路径。

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
    SELECT
        ID,
        ParentID,
        Name AS Path
    FROM
        tblHierarchy
    WHERE
        ParentID IS NULL

    UNION ALL

    SELECT
        TH.ID,
        TH.ParentID,
        CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
    FROM
        tblHierarchy TH
    INNER JOIN
        Parent
    ON
        Parent.ID = TH.ParentID
)
SELECT * FROM Parent

OUTPUT:

ID  ParentID    Path
1   NULL        1
2   NULL        2
3   NULL        3
4   1       1/1.1
5   1       1/1.2
6   4       1/1.1/1.1.1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2005 中的分层查询 的相关文章

  • Python 和 SQLite:插入表

    具有以下表架构 tablename name varchar 100 age int sex char 1 有一个list有 3 行 每行代表一个表行 row1 laks 444 M row2 kam 445 M row3 kam 445
  • 加载SSIS包时出错

    我正在尝试在 SQL Server 2008R2 上执行 SSIS 包 该脚本检索远程服务器上的数据并将其复制到本地数据库 该作业每小时安排一次 SQL 代理使用代理向远程计算机验证自身身份 身份验证似乎没问题 但在加载 SSIS 包期间出
  • 根据多列删除重复项

    我使用以下内容列出了重复项 select s MessageId t from Message s join select ToUserId FromUserId count as qty from Message group by ToU
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • SQL Server 使用递归 CTE 获取路径

    我想以 1 1 1 2 等格式获取每个部门的路径 这是我的部门表 id name parentId 1 Dep 1 0 2 Dep 2 1 3 Dep 3 0 4 Dep 4 1 5 Dep 5 4 6 Dep 6 2 这是我的递归 CTE
  • 如何获取ms sql中float列中小数点后的位数?

    我必须计算 MS Sql Server 托管的数据库中小数点后的数字 2005 或 2008 并不重要 以纠正用户犯的一些错误 我在 Oracle 数据库上也遇到同样的问题 但事情没那么复杂 Oracle 上的底线是 select leng
  • 如何加载大量字符串与oracle数据库匹配?

    我目前正在学习 PL SQL 所以我还是一个新手 假设您有一个生产数据库 并使用 Oracle SQL Developer 连接到该数据库 您对该数据库仅有读取权限 因此您无法创建或编辑任何表 我的问题是 如果我有一个很大的 ID 列表 我
  • 从 SQL 数据库反序列化数据

    我有一个小应用程序 由数据库支持 SQLite 但它与问题并不真正相关 我定义了一些类型 例如 data Whatever Whatever Int Int String String data ImportantStuff Importa
  • 当 COUNT(*) 为 NULL 时,GROUP BY 返回 0

    这是我原来的查询 SELECT CAST IndexedDate as varchar COUNT AS Logins FROM Table WHERE EventType Login AND IndexedDate gt DATEADD
  • 测试 ODBC 连接的有效方法

    我们的产品是一个 TCP 监听事务处理器 传入连接被分配一个线程来处理连接和一个数据库连接来使用 我们维护一个数据库连接池 而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法 数据库连接池相当可配置 最小 最大大小 增长率等 一些细节
  • sp_MSforeachtable 在每个表上执行过程

    我想打印一些动态查询来对数据库中的所有表执行过程 这是我到目前为止所写的 EXEC SP MSFOREACHTABLE IF EXISTS SELECT FROM INFORMATION SCHEMA COLUMNS WHERE COLUM
  • 如何在Oracle中获取每周数据

    我制作了一个矩阵报告 其中需要根据选择参数动态显示列 我有一个日期选择参数 如果我在选择参数上选择日期为 03 01 2010 2010 年 3 月 1 日 那么它应该显示为 3 月 1 日 3 月 7 日 这取决于你追求什么 如果您在接下
  • 使用 C# 检索 SQL Server 中具有 varchar 数据类型的字段的大小

    我正在使用 VS 2010 和 SQL Server 2008 在 ASP NET 中创建一个项目 我想检索具有以下内容的列的大小varchar数据类型 e g Varchar 20 我想要 20 而不是最大可能的大小varchar使用 C
  • 如何处理 FOR XML PATH/AUTO 中的空白值 - SQL Server?

    有没有人对这种 SQL Server 行为有任何见解或遇到过 当空白值转换为数据类型时 char 或具有 的列char 作为数据类型 处理使用For XML PATH 它返回 XML 结果 20 空格的特殊字符编码 当相同的空白值转换为va
  • 根据多列删除重复记录

    在我们的系统中 我们每小时从外部数据库进行导入 由于导入脚本中存在错误 现在存在一些重复记录 如果任何记录具有相同的内容 则视为重复 legacy id and company 我可以运行什么代码来查找并删除这些重复项 我正在玩这个 Pro
  • 是否有一个sql条件可以查找列中的非整数?

    基本上我想要一个像这样运行的 select 语句 SELECT FROM table WHERE column IS NOT INT 是否存在这样的条件或者如何检查 nvarchar 10 列中的非整数 In SQL Server你可以做
  • 通过sql视图向多个表插入数据

    mysql 有没有办法通过视图向多个表插入数据 MySQL 参考手册对于可更新视图是这样说的 一些视图是可更新的 也就是说 您可以在诸如以下的语句中使用它们UPDATE DELETE or INSERT更新基础表的内容 为了使视图可更新 必
  • Oracle TO_DATE 函数中跳过字符

    我正在导入 tsv 中具有 SQL Server 格式日期的数据 yyyy mm dd hh24 mi ss mmm 使用 SQL Developer 的导入数据向导导入 Oracle 数据库 我怎样才能忽略 mmm用于将它们导入 DATE
  • 如何使用 SQL 计算一条路线的行驶次数?

    我需要确定在给定的日期范围内每辆车行驶特定路线的次数 但建立在数据库之上的 GPS 管理软件没有此功能 该数据库包含多个存储 GPS 路线和位置数据的表 路线由多个位置和序列号组成 位置是附加到名称的一组上限和下限纬度 经度值 车辆每分钟将
  • 从条件表中获取 WHERE 子句的条件

    我创建了以下简单的DataModel 我用以下数据填充了表格 1 桌子Customer INSERT INTO test customer CustomerName Country RegistrationDate VALUES Custo

随机推荐

  • Prolog — 对称谓词

    我必须在序言中模拟家谱 我有对称谓词的问题 Facts parent x y male x female y age x number Rules blood relation让我头疼 这就是我所做的 blood relation X Y
  • Qt 覆盖小部件快捷方式(窗口快捷方式)

    我有一个 Qt 应用程序 其中在 Qt Designer 表单操作中定义了多个窗口快捷方式 这些快捷键效果很好 直到焦点位于处理相同组合的小部件上 覆盖我的窗口快捷键 时按下它们 我想要相反的行为 窗口快捷方式覆盖聚焦的小部件快捷方式 我尝
  • 如何将oracle中的number(7,2)更改为varchar?

    I m using Oracle 10g I want to append to all values in sal column To acomplish this first I m trying to change data type
  • Boost:bjam 如何构建库名称?

    我在查看 jam 文件 了解库的名称是如何构造的 例子 libboost log mgw46 mt 1 48 dll 我想忽略最后一部分 即如何使用我构造的名称传递链接器 o 参数 我的版本很少 并且在一个大项目中链接迫使我对项目文件进行更
  • 从 aws Glue 脚本调用存储过程

    ETL 作业完成后 在 AWS Glue 脚本中调用存储过程的最佳方式是什么 我正在使用 PySpark 从 S3 获取数据并将其存储在临时表中 在这个过程之后 需要调用一个存储过程 该存储过程将数据从临时表加载到相应的 MDS 表中 如果
  • Firebase Cloud Function:multipart/form-data 出现“意外的表单结束”错误

    我正在尝试在我的 Cloud Function Express 应用程序上创建文件上传路由 我尝试过不同的模块 例如formidable multer and busboy 但是在使用 firebase 模拟器运行服务器时 没有一个可以逃脱
  • J=1 且 W=Majority 的 MongoDB 副本集上是否仍会发生回滚?

    我一直在阅读文档 根据我的理解 我可以看到仍然可能发生回滚的情况 写入到主数据库 确认日志已写入磁盘 大多数辅助节点确认写入但不写入磁盘 整个集群断电 当电源恢复时 主设备由于某种原因无法启动备份 次要角色扮演主要角色 最初的主节点最终启动
  • MySQL 转储 CronJob

    我正在尝试创建一个 cron 来每天备份我的 MySQL 从站 backup sh内容 bin bash Backup mysql from slave sudo mysql u root p xxxxx e STOP SLAVE SQL
  • Android ListView 复选框选择

    我在这里有一个由两部分组成的问题 1 如何填充我的ListView以便显示字符串 但是当选择项目时 不可见的id值 来自手机联系人的联系人id 是实际使用的值 2 我有一个使用 multipleChoice 模式进行项目选择的 ListVi
  • Node.js 中的 Python 多处理 - 在子进程上打印不起作用

    我有一个运行客户端界面的 Node js 应用程序 该界面公开触发机器学习任务的操作 由于在实现机器学习相关内容时 Python 是更好的选择 因此我实现了一个按需运行机器学习任务的 Python 应用程序 现在 我需要集成这两个应用程序
  • MongoDB list集合过滤器

    我正在使用 Node js 我正在尝试过滤必须排除集合 出口 的集合并检索所有其他集合 但我似乎无法弄清楚语法 我试过了 db listCollections filter outlets toArray err docs 有什么建议么 您
  • 如何将位图转换为文件而不压缩

    我需要从服务器下载图像并以其原始质量保存 但显然保存后图像被压缩并且质量下降 我使用 android async http 库来处理 http 请求 我的请求和保存文件的代码 AsyncHttpClient client new Async
  • 从 WPF 窗口中删除图标

    我可以使用 WinApi 从 WPF 窗口中删除窗口图标 但是当我仅运行 WPF 项目的可执行文件时 我会在应用程序窗口中再次获得该图标 如何删除该图标 From WPF教程 http www wpftutorial net RemoveI
  • 构建表达式树

    我正在努力思考如何为更多 lambda 构建表达式树 如下所示 更不用说可能有多个语句的东西了 例如 Func
  • Python语法错误:无法分配给模块中的运算符,但可以在解释器中工作

    我有一根绳子a我想根据它的长度将它分成两半 所以我有 a front len a 2 len a 2 这在解释器中工作正常 但是当我从命令行运行模块时 python 给了我一个SyntaxError can t assign to oper
  • 如何使 Cucumber 功能作为本地单元测试在 Android 项目中运行?

    我有一个用 Java 编写的 Android 项目 正在 Android Studio 中进行 我想使用 Cucumber 对一些内部组件进行集成测试 注意 我知道这不是 BDD 方式 但对我来说很有用 我希望测试运行为本地单元测试 htt
  • WSO2 Identity Server 5.0.0 无法从辅助用户存储中为用户返回 SAMLResponse 中的用户声明

    我在使用 SAML SSO 身份验证时遇到此问题 我已经成功设置了 WSO2IS 5 0 0 身份服务器 我还成功设置了 至少我希望如此 辅助用户存储 我使用 JDBCUserStoreManager 实现 我已将此商店设置为 DOMAIN
  • 微服务中的事务

    我读过一些关于微服务架构的文章 但没有人涉及事务的主题 他们都说这很难做到 也许有人可以描述如何处理这个问题 但不是从领域方面 而是从技术方面 假设我们有一个业务案例 我们需要调用两个不同的服务 并且它们都对数据库进行一些更改 但是如果第二
  • 如何从存储在 char* 指针中的 name 调用 c 函数?

    我想通过函数的名称动态调用函数 例如 假设有以下函数和字符串 void do fork printf Fork called n char pFunc do fork 现在我需要打电话do fork 就在 pFunc 那么这可能吗 欢迎 C
  • SQL Server 2005 中的分层查询

    早在我在 Oracle 商店工作时 我就认为 CONNECT BY 是理所当然的 现在我一直在使用 SQL Server 2005 并且有一些令人讨厌的对象层次结构 具体来说 我们有一个自引用表 其中所有子记录都有一个包含其父记录 ID 的