伸伸你的手,小小问题,看看 CTE 递归 100hao270431700]

发布时间:2017-3-23 18:28:21 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"伸伸你的手,小小问题,看看 CTE 递归 100hao270431700]",主要涉及到伸伸你的手,小小问题,看看 CTE 递归 100hao270431700]方面的内容,对于伸伸你的手,小小问题,看看 CTE 递归 100hao270431700]感兴趣的同学可以参考一下。

上面是要实现的效果图! 这个图是数据表的内容 这个图是自己写的,但是效果达不到,大神指定,

把原数据以文本方式贴出来,我测试一下,不下一个一个敲

;WITH T_会计科目 AS ( SELECT [ID],[名字],[父级ID] FROM [会计科目]  WHERE [父级ID]=0 UNION ALL  SELECT a.[ID],a.[名字],a.[父级ID] FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id ) SELECT * FROM T_会计科目 没数据不想测,你试试

引用 2 楼 DBA_Huangzj 的回复:;WITH T_会计科目 AS ( SELECT [ID],[名字],[父级ID] FROM [会计科目]  WHERE [父级ID]=0 UNION ALL  SELECT a.[ID],a.[名字],a.[父级ID] FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id ) SELECT * FROM T_会计科目 没数据不想测,你试试 每次看到楼主的头像都觉得楼主好像很生气的样子。

引用 3 楼 zhengldg 的回复:Quote: 引用 2 楼 DBA_Huangzj 的回复: ;WITH T_会计科目 AS ( SELECT [ID],[名字],[父级ID] FROM [会计科目]  WHERE [父级ID]=0 UNION ALL  SELECT a.[ID],a.[名字],a.[父级ID] FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id ) SELECT * FROM T_会计科目 没数据不想测,你试试 每次看到楼主的头像都觉得楼主好像很生气的样子。那叫努力学习,day day up

DBA_Huangzj 给的代码结果图如上,是不对的,要的效果图,是递归的效果,是下面这个效果图!

引用USE [lgz] GO /****** Object:  Table [dbo].[会计科目]    Script Date: 2013/5/29 9:03:42 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[会计科目]( [ID] [int] IDENTITY(1,1) NOT NULL, [名字] [nvarchar](255) NULL, [父级ID] [int] NULL, [累计金额] [money] NULL, [是否系统科目] [bit] NOT NULL ) ON [PRIMARY] GO 这些表结构 ID 名字      父级ID 累计金额 是否系统科目 1 【收入类】 0   0.00            1 2 【支出类】 0   0.00         1 3  【利润】 0      100.00 1 4  『销售收入』 1   400.00 1 5 『其他收入』 1   0.00         1 6 『采购支出』 2   1500.00 1 7 『其他支出』 2   0.00         1 8 其他收入 5   0.00         0 9 其他… 5 0.00   0 10 其他支出 7   0.00         0 11 其他… 7 0.00   0 12 『商品类收入』 1   0.00          0 13 『商品类支出』 2         0.00         0 14 报溢收入 12   0.00         0 15 报损支出 13   0.00         0

有数据就好办---------------------------------------------------------------- -- Author  :DBA_Huangzj(發糞塗牆) -- Date    :2013-05-29 11:48:33 -- Version: --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)  -- Jun 17 2011 00:54:03  -- Copyright (c) Microsoft Corporation -- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721) -- ---------------------------------------------------------------- --> 测试数据:[会计科目] if object_id('[会计科目]') is not null drop table [会计科目] go  create table [会计科目]([ID] int,[名字] varchar(14),[父级ID] int,[累计金额] numeric(6,2),[是否系统科目] int) insert [会计科目] select 1,'【收入类】',0,0.00,1 union all select 2,'【支出类】',0,0.00,1 union all select 3,'【利润】',0,100.00,1 union all select 4,'『销售收入』',1,400.00,1 union all select 5,'『其他收入』',1,0.00,1 union all select 6,'『采购支出』',2,1500.00,1 union all select 7,'『其他支出』',2,0.00,1 union all select 8,'其他收入',5,0.00,0 union all select 9,'其他…',5,0.00,0 union all select 10,'其他支出',7,0.00,0 union all select 11,'其他…',7,0.00,0 union all select 12,'『商品类收入』',1,0.00,0 union all select 13,'『商品类支出』',2,0.00,0 union all select 14,'报溢收入',12,0.00,0 union all select 15,'报损支出',13,0.00,0 --------------开始查询-------------------------- ;WITH T_会计科目 AS (  SELECT [ID],[名字],[父级ID] ,[ID] AS ORDERID FROM [会计科目]   WHERE [父级ID]=0  UNION ALL  SELECT a.[ID],a.[名字],a.[父级ID] , a.[父级ID] FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id  )  SELECT [ID],[名字],[父级ID]  FROM T_会计科目 ORDER BY ORDERID ----------------结果---------------------------- /*  ID          名字             父级ID ----------- -------------- ----------- 1           【收入类】          0 4           『销售收入』         1 5           『其他收入』         1 12          『商品类收入』        1 2           【支出类】          0 6           『采购支出』         2 7           『其他支出』         2 13          『商品类支出』        2 3           【利润】           0 8           其他收入           5 9           其他…            5 10          其他支出           7 11          其他…            7 14          报溢收入           12 15          报损支出           13 */

兄弟,结果不对, 结果是图片那样的, 这个图片效果,是直接程序代码写的,用的是递归查询,

其实吧,加一个列,,表示当前级数。。 然后在SELECT a.[ID],a.[名字],a.[父级ID] 的时候,,用级数乘个空格加在名字前面。。。

引用 7 楼 DBA_Huangzj 的回复:有数据就好办---------------------------------------------------------------- -- Author  :DBA_Huangzj(發糞塗牆) -- Date    :2013-05-29 11:48:33 -- Version: --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)  -- Jun 17 2011 00:54:03  -- Copyright (c) Microsoft Corporation -- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721) -- ---------------------------------------------------------------- --> 测试数据:[会计科目] if object_id('[会计科目]') is not null drop table [会计科目] go  create table [会计科目]([ID] int,[名字] varchar(14),[父级ID] int,[累计金额] numeric(6,2),[是否系统科目] int) insert [会计科目] select 1,'【收入类】',0,0.00,1 union all select 2,'【支出类】',0,0.00,1 union all select 3,'【利润】',0,100.00,1 union all select 4,'『销售收入』',1,400.00,1 union all select 5,'『其他收入』',1,0.00,1 union all select 6,'『采购支出』',2,1500.00,1 union all select 7,'『其他支出』',2,0.00,1 union all select 8,'其他收入',5,0.00,0 union all select 9,'其他…',5,0.00,0 union all select 10,'其他支出',7,0.00,0 union all select 11,'其他…',7,0.00,0 union all select 12,'『商品类收入』',1,0.00,0 union all select 13,'『商品类支出』',2,0.00,0 union all select 14,'报溢收入',12,0.00,0 union all select 15,'报损支出',13,0.00,0 --------------开始查询-------------------------- ;WITH T_会计科目 AS (  SELECT [ID],[名字],[父级ID] ,[ID] AS ORDERID FROM [会计科目]   WHERE [父级ID]=0  UNION ALL  SELECT a.[ID],a.[名字],a.[父级ID] , a.[父级ID] FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id  )  SELECT [ID],[名字],[父级ID]  FROM T_会计科目 ORDER BY ORDERID ----------------结果---------------------------- /*  ID          名字             父级ID ----------- -------------- ----------- 1           【收入类】          0 4           『销售收入』         1 5           『其他收入』         1 12          『商品类收入』        1 2           【支出类】          0 6           『采购支出』         2 7           『其他支出』         2 13          『商品类支出』        2 3           【利润】           0 8           其他收入           5 9           其他…            5 10          其他支出           7 11          其他…            7 14          报溢收入           12 15          报损支出           13 */ ---------------------- 你如果觉得顺序不对,你可以自己把上面那段 select 1,'【收入类】',0,0.00,1 union all select 2,'【支出类】',0,0.00,1 union all select 3,'【利润】',0,100.00,1 union all select 4,'『销售收入』',1,400.00,1 union all select 5,'『其他收入』',1,0.00,1 union all select 6,'『采购支出』',2,1500.00,1 union all ===== 重新写一遍按你想要的顺序来写。 ================================== 其实这个可以通过:创建临时表,循环查询是否有子类,无则直接查同类的下一级。。相关的可以看一下:数据结构方面的,“树”

create table ha (ID int, 名字 varchar(20), 父级ID int, 累计金额 decimal(8,2), 是否系统科目 int) insert into ha  select 1, '【收入类】', 0, 0.00, 1 union all  select 2, '【支出类】', 0, 0.00, 1 union all  select 3, '【利润】', 0, 100.00, 1 union all  select 4, '『销售收入』', 1, 400.00, 1 union all  select 5, '『其他收入』', 1, 0.00, 1 union all  select 6, '『采购支出』', 2, 1500.00 , 1 union all  select 7, '『其他支出』', 2, 0.00, 1 union all  select 8, '其他收入', 5, 0.00, 0 union all  select 9, '其他…', 5, 0.00, 0 union all  select 10, '其他支出', 7, 0.00, 0 union all  select 11, '其他…', 7, 0.00, 0 union all  select 12, '『商品类收入』', 1, 0.00, 0 union all  select 13, '『商品类支出』', 2, 0.00, 0 union all  select 14, '报溢收入', 12, 0.00, 0 union all  select 15, '报损支出', 13, 0.00, 0 with t as (select ID,名字,累计金额,父级ID,ID 'ZID',1 'lv' from ha where 父级ID=0  union all  select b.ID,b.名字,b.累计金额,b.父级ID,a.ZID,a.lv+1 'lv'   from t a   inner join ha b on a.ID=b.父级ID ) select ID,cast(replicate('     ',lv)+名字 as varchar(50)) '名字',累计金额  from t  order by ZID,ID /* ID          名字                                                   累计金额 ----------- -------------------------------------------------- --------------------------------------- 1                【收入类】                                         0.00 4                     『销售收入』                                  400.00 5                     『其他收入』                                  0.00 8                          其他收入                                0.00 9                          其他…                                0.00 12                    『商品类收入』                                0.00 14                         报溢收入                                 0.00 2                【支出类】                                          0.00 6                     『采购支出』                                  1500.00 7                     『其他支出』                                   0.00 10                         其他支出                                 0.00 11                         其他…                                 0.00 13                    『商品类支出』                                 0.00 15                         报损支出                                 0.00 3                【利润】                                           100.00 (15 row(s) affected) */

上一篇:1433telnet不通的原因 40c02645]
下一篇:sql:xml读取 30lfz860110]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款