这个SQL函数怎样写(递归)
发布网友
发布时间:2022-04-13 14:15
我来回答
共3个回答
热心网友
时间:2022-04-13 15:45
CREATE TABLE T(ID INT ,PID INT)
INSERT INTO T SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
UNION ALL SELECT 4,1
UNION ALL SELECT 5,2
UNION ALL SELECT 6,4
UNION ALL SELECT 7,3
UNION ALL SELECT 8,4
GO
--测试数据
CREATE FUNCTION F(@ID INT)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @R VARCHAR(20)
SET @R=@ID
WHILE ISNULL(@ID,'')<>''
BEGIN
SELECT @R=CAST(PID AS VARCHAR(20))+'.'+@R FROM T WHERE ID=@ID
SELECT @ID=PID FROM T WHERE ID=@ID
END
RETURN @R
END
GO
--生成目录
CREATE FUNCTION F2(@F VARCHAR(20))
RETURNS VARCHAR(20)
BEGIN
DECLARE @R VARCHAR(20)
SET @R=''
SET @F=SUBSTRING(@F,4,LEN(@F))
WHILE CHARINDEX('.',@F,1)<>0
BEGIN
SET @F=SUBSTRING(@F,CHARINDEX('.',@F,1)+1,LEN(@F))
SET @R='-'+@R
END
RETURN @R
END
GO
--生成前缀符号
SELECT DBO.F2(DBO.F(ID))+CAST(ID AS VARCHAR) FROM T ORDER BY DBO.F(ID)
--结果
GO
DROP TABLE T
DROP FUNCTION F
DROP FUNCTION F2
--不明白HI我
热心网友
时间:2022-04-13 17:03
正好,我刚写了一篇此算法的博客
http://blog.csdn.net/sq_zhuyi/archive/2009/02/06/3865977.aspx
热心网友
时间:2022-04-13 18:37
能再补充说明一下吗?有点不理解
是不是把上面的查询后输出时要按后面的来呀?
sql递归查询(向上反查和向下查询)
SQL递归查询,分为向上反查和向下查询,通过WITH RECURSIVE定义递归表达式,实现深度遍历。初始查询语句如下:选择member_sys_industry表中特定条件下的数据,包括id、no、parent_no、type_name、grade,确保数据有效且类型为0,且行业名称包含“水泥”,且关系为1。将初始查询与递归查询结合,递归查询通过JOIN...
sql 怎么递归查询的方法:
Insertintotest_connectvalues(1,1);Insertintotest_connectvalues(2,1);Insertintotest_connectvalues(3,2);Insertintotest_connectvalues(4,3);提交;3.查询数据表的内容,选择*fromtest_connect,4.执行递归查询语句,将答案添加到nocycle元素中,就不会有[ora-01436:CONNECTBYer...
oracle中使用sql递归算出1加到100的值
--自己调用自己才是递归 create or replace function addn(n number)return number is begin if n=1 then return 1;else return n+addn(n-1);end if;end;/ SQL> select addn(100) from dual;ADDN(100)--- 5050
SQL 函数递归
给你一个例子,跟这个差不多:CREATE TABLE T(ID INT ,PID INT)INSERT INTO T SELECT 1,0 UNION ALL SELECT 2,0 UNION ALL SELECT 3,1 UNION ALL SELECT 4,1 UNION ALL SELECT 5,2 UNION ALL SELECT 6,4 UNION ALL SELECT 7,3 UNION ALL SELECT 8,4 GO --测试数据 CREATE FUNCTION ...
SQL函数怎么实现递归
declare @b nvarchar(2) =1;with abc(id,b_PriorID,level)as (select id,b_PriorID,0 level from #tt where b_PriorID =@b union all select a.id,a.b_PriorID,t.level+1 from #tt a inner join abc t on t.id=a.b_PriorID )select * from abc 你试试可以么?
这个sql语句怎么写?最好不用使用 code 计算length ,code是动态的_百度...
2,0,'001002')insert into t values(3,1,'00100101')insert into t values(4,1,'00100102')insert into t values(5,1,'00100103')insert into t values(6,2,'00100201')insert into t values(7,3,'0010010101')insert into t values(8,3,'0010010102')--查询(递归表达式)with CTAs(...
SQL递归获取所有父节点的函数
CREATE FUNCTION 函数名( @id AS varchar(2)) RETURNS varchar(1000) AS BEGIN DECLARE @tmp VARCHAR(1000)IF @id IS NOT NULL BEGIN SELECT @tmp=@id+','+isnull(dbo.函数名(第三列字段),'') FROM [表名] WHERE [第一列字段] = @id END RETURN @tmp END 调用方法:SELECT substring...
sql语句实现递归查询所有节点,mysql和oracle都能用的
如果是从子节点递归到父节点查询,就把start with 换成unid,prior左右对换 下面再讲MySql 的递归查询方式。MySql没有Oracle的强大功能,虽然都是同一个公司的产品。所以只能靠自己写。有很多方法,用sql去循环查询,或者写存储过程,我这里只提供一种。就是新建一个function函数。表结构不说了,无非就是...
MySQL递归查询上下级菜单
综上所述,通过`GROUP_CONCAT()`和`FIND_IN_SET()`函数的运用,我们成功实现了多级菜单的展示,并通过SQL语句解决了相关问题。这种方法简洁易懂,适用于需要查询层级关系的场景。在实际应用中,我们还可以通过递归构建单位树,实现更复杂的业务逻辑。本文提供的SQL解决方案仅作为实现该功能的一种方法,如...
sql 科目余额表
--递归CREATE OR REPLACE FUNCTION recursion_func(in_序号 NUMBER) RETURN NUMBER ISv_sum NUMBER;v_借方金额 NUMBER;v_贷方金额 NUMBER;BEGIN SELECT 借方金额,贷方金额 INTO v_借方金额,v_贷方金额 FROM table_name; IF in_序号 <= 1 THEN v_sum := 期初金额; ELSE v_sum :=...