`
qinysong
  • 浏览: 192871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Re: 一个捆扰我好几天sql分组排(树形结构查询+排序)

SQL 
阅读更多

[quote="junjie314"]  有谁能不能说具体的实现!~~现在如果光排序的那没问题,但是各节点之间不是有顺序的吗??这个顺序是可以改的..现在主要问题是如果要改这个的话就比较麻烦了..比如有两个父节点顺序是23和38  现在把23这个改成39的话..那23下面的所有子节点都要修改..
  这个好象比较麻烦,要么是我设计的问题???[/quote]
首先创建一个SQL函数:weightValue,如下
[code]CREATE FUNCTION weightValue(@idValue int) RETURNS bigint AS
BEGIN
 DECLARE @return bigint
 DECLARE @fatherID int
 DECLARE @number int
 DECLARE @menuPath VARCHAR(50)
 DECLARE @treeLevel int
 DECLARE @weightLevel bigint

 SET @return = 0
 SET @weightLevel = 1

 SELECT @fatherID=fatherID,@menuPath=menuPath,@number=number FROM treeTable WHERE id=@idValue

 SELECT @treeLevel=len(@menuPath)-len(replace(@menuPath,'/',''))
 WHILE(@treeLevel<9) --此处9为目录层次数,经测试bigInt可以支持9级目录,再多目录层次就会出现益出
 BEGIN
  SET @weightLevel=@weightLevel*100
  SET @treeLevel=@treeLevel+1
 END
 SET @return=@number*@weightLevel

 IF(@fatherID = 1)
 BEGIN
  RETURN(@return)
 END

 RETURN ([dbo].weightValue(@fatherID)+@return)
END[/code]

然后一个简单的查询SQL即可,如下:
[code]SELECT id,fatherId,menuPath,number FROM treeTable ORDER BY [dbo].weightValue(id)[/code]

查询结果就是想要的排列顺序,结果如下,因为结果是实时查询,所以节点可以随时配置
[code]112 1 /112 23
114 112 /112/114 1
116 114 /112/114/116 8
115 114 /112/114/115 9
113 112 /112/113 2
107 1 /107 38
109 107 /107/109 1
111 109 /107/109/111 4
110 109 /107/109/110 5
108 107 /107/108 2[/code]

分享到:
评论

相关推荐

    SqlServer树形结构、层次查询

    SqlServer树形结构、层次查询 结果如下: 1 1 2 1-2 4 1-2-4 5 1-2-5 10 1-2-5-10 8 1-2-5-8 6 1-2-6 3 1-3 7 1-3-7 11 1-3-7-11 9 1-3-7-9 12 1-3-7-9-12 13 1-3-7-9-13 14 1-3-7-9-14

    sqlserver实现树形结构递归查询(无限极分类)的方法

    接下来,使用递归CTE来查询树形结构。递归CTE的基本结构如下: ```sql WITH RecursiveCTE (ColumnList) AS ( -- 基础查询(非递归部分) SELECT ... FROM ... UNION ALL -- 递归部分 SELECT ... FROM ...

    U9所有BOM树形结构展开SQL.sql

    只需要修改下面指定修改部分即可使用,原则上支持树形展开和排序,但由于实际数据量很大,因此可以按料段展开(U9 V3.0),欢迎交流。

    无限级树形菜单(Sql数据库)

    - **自连接查询**:在SQL中,可以使用自连接来查询树形结构,通过比较当前节点的ID与父节点的ID来获取子节点。 - **CTE(公共表表达式)**:使用WITH关键字创建一个递归公共表表达式,可以从根节点开始遍历整个树...

    左侧树形菜单+右侧页面+sql2000

    在这个特定的项目中,标题“左侧树形菜单+右侧页面+sql2000”表明这是一个结合了三层树形菜单、右侧内容区域以及与SQL Server 2000数据库交互的Web应用程序。 首先,我们来深入理解“树形菜单”。树形菜单是一种...

    VS2005+sql server2000实现无限级树形菜单

    在这个场景下,我们需要设计一个数据库表结构来表示树形菜单的层次关系。一般我们会使用自引用的方式,即一个表中的一条记录可以关联到同表中的其他记录,形成层级关系。 **无限级树形菜单的数据结构设计** - 创建...

    sql模糊查询并按匹配度排序

    ### SQL模糊查询并按匹配度排序 在数据库查询操作中,模糊查询是非常常见的一种需求,尤其是在需要处理大量数据且查询条件不确定的情况下。本篇文章将基于提供的SQL查询语句,详细介绍如何进行SQL模糊查询以及如何...

    Microsoft SQL Server中T-SQL关于树(层次)结构的处理研究.pdf

    排序是处理树形结构数据时的一个重要方面,尤其是在树形结构的显示上。文章讨论了在客户端或服务器端进行排序的不同方法,并强调服务器端排序的重要性。DAG(有向无环图)的拓扑排序是指孩子的排序值大于其父节点,...

    Excel_VBA+ADO+SQL入门教程_-_汇总.pdf

    首先,我们需要创建一个 ADO 连接对象,使用 Connection 对象的 Open 方法来连接数据库。然后,我们可以使用 Recordset 对象来执行 SQL 语句,获取查询结果。最后,我们可以使用关闭连接和释放资源。 字段查询 在 ...

    Java动态树形权限菜单JavaScript+SqlServer2005

    在IT行业中,构建一个动态树形权限菜单是常见的需求,特别是在开发管理后台或者Web应用程序时。这个主题聚焦于使用Java后端与JavaScript前端,结合SqlServer2005数据库来实现这样的功能。以下将详细讲解这一技术栈中...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    notepad++sql格式化插件

    "notepad++sql格式化插件"是针对Notepad++设计的一个专用工具,用于帮助程序员更方便地管理和美化SQL查询语句。 该插件的主要功能是格式化SQL语句,这意味着它可以自动调整代码的缩进、换行和空格,使得代码更加...

    SQL结构化查询语言速学宝典 第2版.pdf

    根据提供的文件信息,“SQL结构化查询语言速学宝典 第2版.pdf”这一标题与描述表明这是一本关于SQL(Structured Query Language)的学习指南。本书旨在帮助读者快速掌握SQL的基础知识及其在数据库管理中的应用。下面...

    java 连接sqlserver数据库查询,并分页显示

    在Java编程中,连接SQL Server数据库并执行查询是常见的任务,尤其当涉及到大量数据时,分页显示就显得尤为重要。本篇文章将详细讲解如何使用Java连接SQL Server数据库,执行查询语句以及实现分页显示。 首先,我们...

    sql正宗模糊查询(仿百度)关键字密度排序查询,不一定要词组匹配

    在本主题中,我们将深入探讨"sql正宗模糊查询",特别是如何模仿百度搜索引擎的关键字密度排序查询,同时理解不一定要词组匹配的概念。这在大数据检索、搜索引擎优化(SEO)以及提供更精确的用户搜索结果时特别有用。...

    asp.net树形结构菜单demo/无限级分类/zTree

    jquery的一个插件zTree...此demo是用vs08+sql2005写的 可任意修改 像样更多的功能和外观 就去zTree官网下一个 我写的这个是动态的 就是说是连接数据库的 class表 必须的字段 ID 父ID 还有类别名称。 不懂的可以随时问我

    extjs 在线sql查询

    在“在线SQL查询”这个场景中,ExtJS 被用来构建一个用户界面,允许用户在浏览器中直接执行SQL查询,这对于数据库管理或数据分析来说非常方便。 `Ext.ux.window.VisualSQLQueryBuilder` 是ExtJS的一个扩展组件,...

    sql复杂查询例子大全

    同一个表自身进行连接,常用于处理层次结构或查找相关数据。 ```sql SELECT t1.name AS parent, t2.name AS child FROM table t1, table t2 WHERE t1.id = t2.parent_id; ``` 7. **UNION操作符**: 用于合并两...

    ACCESS中的结构化查询语言SQL.pdf

    以下是一个简单的示例,演示如何使用SQL语言查询工资大于400元,性别为男的职工记录: SELECT 姓名,部门 FROM 工资表 WHERE 工资 &gt; 400 AND 性别 = '男' 在这个示例中,我们使用SELECT语句选择姓名和部门两个字段...

    SSH+Easyui之TreeGrid树形展现数据

    在实现TreeGrid时,通常需要编写一个Struts2 Action来获取数据,该Action可能会调用Spring管理的Service层方法,由Service层进一步调用Hibernate的DAO层来查询数据库中的树形结构数据。 描述中提到的"树形展现数据...

Global site tag (gtag.js) - Google Analytics