设计递归数据

Persistence_x 2018-07-13 12:24:19
第一级 第二级 第三级 第四级 变量代码
因变量 统计局口径 汽油表观消费量 ytq
车辆变量 汽油车 保有量 标准车 cqb0
宏观变量 国内生产总值 hgdp

设计表

查询结果如上
...全文
181 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
在线等, 写到一半,感觉递归 有些问题了,
二月十六 2018-07-13
  • 打赏
  • 举报
回复
引用 15 楼 xiaohuaidan1988 的回复:
[quote=引用 13 楼 sinat_28984567 的回复:]
你看是这个意思不
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([VariableCode] int,[VariableName] nvarchar(24),[PVariableCode] INT,[VariableFullName] NVARCHAR(100))
Insert #T
select 1,N'根目录',0,'A' union all
select 2,N'第一级1',1,'A' union all
select 3,N'第一级2',1,'A' union all
select 4,N'第二级',3,'A' union all
select 5,N'B根目录',0,'B'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = '
;WITH cte AS (
Select *,1 AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
select VariableFullName'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY VariableFullName ORDER BY PVariableCode) AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
SELECT @sql = @sql + ',max(case rn when ' + RTRIM(rn)
+ ' then VariableName else '''' end)[第' + RTRIM(rn) + '级]'
FROM ( SELECT DISTINCT
rn
FROM cte
) a
SET @sql = @sql
+ ' from cte group by VariableFullName'
EXEC(@sql)



你好,版主, 用这个declare 无法创建视图啊,
能不能直接像select 这样查询出来的, 因为我要创建视图, 或者left join 这个结果 使用 [/quote]
这种的直接动态拼接,可以用存储过程实现
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 13 楼 sinat_28984567 的回复:
你看是这个意思不
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([VariableCode] int,[VariableName] nvarchar(24),[PVariableCode] INT,[VariableFullName] NVARCHAR(100))
Insert #T
select 1,N'根目录',0,'A' union all
select 2,N'第一级1',1,'A' union all
select 3,N'第一级2',1,'A' union all
select 4,N'第二级',3,'A' union all
select 5,N'B根目录',0,'B'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = '
;WITH cte AS (
Select *,1 AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
select VariableFullName'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY VariableFullName ORDER BY PVariableCode) AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
SELECT  @sql = @sql + ',max(case rn when ' + RTRIM(rn)
        + ' then VariableName else '''' end)[第' + RTRIM(rn) + '级]'
FROM    ( SELECT DISTINCT
                    rn
          FROM      cte
        ) a
SET @sql = @sql
    + ' from cte group by VariableFullName'
EXEC(@sql)

你好,版主, 用这个declare 无法创建视图啊, 能不能直接像select 这样查询出来的, 因为我要创建视图, 或者left join 这个结果 使用
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 13 楼 sinat_28984567 的回复:
你看是这个意思不
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([VariableCode] int,[VariableName] nvarchar(24),[PVariableCode] INT,[VariableFullName] NVARCHAR(100))
Insert #T
select 1,N'根目录',0,'A' union all
select 2,N'第一级1',1,'A' union all
select 3,N'第一级2',1,'A' union all
select 4,N'第二级',3,'A' union all
select 5,N'B根目录',0,'B'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = '
;WITH cte AS (
Select *,1 AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
select VariableFullName'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY VariableFullName ORDER BY PVariableCode) AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
SELECT  @sql = @sql + ',max(case rn when ' + RTRIM(rn)
        + ' then VariableName else '''' end)[第' + RTRIM(rn) + '级]'
FROM    ( SELECT DISTINCT
                    rn
          FROM      cte
        ) a
SET @sql = @sql
    + ' from cte group by VariableFullName'
EXEC(@sql)

应该是的,我研究一下,谢谢
二月十六 2018-07-13
  • 打赏
  • 举报
回复
你看是这个意思不
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([VariableCode] int,[VariableName] nvarchar(24),[PVariableCode] INT,[VariableFullName] NVARCHAR(100))
Insert #T
select 1,N'根目录',0,'A' union all
select 2,N'第一级1',1,'A' union all
select 3,N'第一级2',1,'A' union all
select 4,N'第二级',3,'A' union all
select 5,N'B根目录',0,'B'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = '
;WITH cte AS (
Select *,1 AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
select VariableFullName'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY VariableFullName ORDER BY PVariableCode) AS rn from #T WHERE PVariableCode=0
UNION ALL
SELECT #T.*,cte.rn+1 FROM #T JOIN cte ON #T.PVariableCode=cte.VariableCode
)
SELECT @sql = @sql + ',max(case rn when ' + RTRIM(rn)
+ ' then VariableName else '''' end)[第' + RTRIM(rn) + '级]'
FROM ( SELECT DISTINCT
rn
FROM cte
) a
SET @sql = @sql
+ ' from cte group by VariableFullName'
EXEC(@sql)



Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 10 楼 wwfxgm 的回复:
[quote=引用 9 楼 xiaohuaidan1988 的回复:] [quote=引用 8 楼 sinat_28984567 的回复:] [quote=引用 7 楼 xiaohuaidan1988 的回复:] 可以的, 这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以
再加一列级别就可以实现了 select * from 表 a left join 表 b on a.PVariableCode = b.VariableCode and a.级别=4 and b.级别=3.....[/quote] 这个不用递归肯定不行吧, 我不一定是4级, 也许后期有需求,改成五级,6级呢,[/quote] 版主这样写。你是用五级,六级 那里,改用参数就行了。那样不管多少级都行了。[/quote]
select * from SCS_Test a left join SCS_Test b  on a.PVariableCode = b.VariableCode 

and a.VariableLevel=4 and b.VariableLevel=3 
后面的... 是什么, 查不到第2级和 第一级
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
[quote=引用 7 楼 xiaohuaidan1988 的回复:] 可以的, 这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以
再加一列级别就可以实现了 select * from 表 a left join 表 b on a.PVariableCode = b.VariableCode and a.级别=4 and b.级别=3.....[/quote]
select * from SCS_Test a left join SCS_Test b  on a.PVariableCode = b.VariableCode 

and a.VariableLevel=4 and b.VariableLevel=3 
第2级和 第一级查不出来
wwfxgm 2018-07-13
  • 打赏
  • 举报
回复
引用 9 楼 xiaohuaidan1988 的回复:
[quote=引用 8 楼 sinat_28984567 的回复:]
[quote=引用 7 楼 xiaohuaidan1988 的回复:]

可以的,
这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以


再加一列级别就可以实现了
select * from 表 a left join 表 b on a.PVariableCode = b.VariableCode and a.级别=4 and b.级别=3.....[/quote]
这个不用递归肯定不行吧, 我不一定是4级, 也许后期有需求,改成五级,6级呢,[/quote]

版主这样写。你是用五级,六级 那里,改用参数就行了。那样不管多少级都行了。
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
[quote=引用 7 楼 xiaohuaidan1988 的回复:] 可以的, 这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以
再加一列级别就可以实现了 select * from 表 a left join 表 b on a.PVariableCode = b.VariableCode and a.级别=4 and b.级别=3.....[/quote] 这个不用递归肯定不行吧, 我不一定是4级, 也许后期有需求,改成五级,6级呢,
二月十六 2018-07-13
  • 打赏
  • 举报
回复
引用 7 楼 xiaohuaidan1988 的回复:
可以的,
这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以


再加一列级别就可以实现了
select * from 表 a left join 表 b on a.PVariableCode = b.VariableCode and a.级别=4 and b.级别=3.....
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
[quote=引用 4 楼 xiaohuaidan1988 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:] 描述 级别 变量代码
Excel就是这样的数据, 要设计个表, 查询出来也是这样的结果, 我设计的表, VariableCode ID VariableName 名称 PVariableCode PID VariableFullName 变量名称[/quote] 再加一列级别可以吗?[/quote] 可以的, 这个看自己设计, 然后sql查询的结果,能跟这个Excel展示的一样就可以
二月十六 2018-07-13
  • 打赏
  • 举报
回复
引用 4 楼 xiaohuaidan1988 的回复:
[quote=引用 3 楼 sinat_28984567 的回复:]
描述 级别 变量代码

Excel就是这样的数据, 要设计个表, 查询出来也是这样的结果,

我设计的表,
VariableCode ID
VariableName 名称
PVariableCode PID
VariableFullName 变量名称[/quote]
再加一列级别可以吗?
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
描述 级别 变量代码

VariableId	VariableCode	VariableName	PVariableCode	  PVariableName	VariableFullName
1	                        100	                因变量	           0	             NULL	                  NULL
2	                     100100	   统计局口径	        100	              NULL	                  NULL
3	                    100100100	汽油表观消费量 	100100	     NULL                   ytq
4	                       101	           车辆变量	           0	             NULL                   NULL
5	                      101100	  汽油车	                 101              NULL	                NULL
6	                    101100100	      保有量	         101100	      NULL           	NULL
7	                  101100100100	标准车	         101100100	NULL         	cqb0
我是这样设计的,但是查询递归出来, 不知道是不是要行转列,
Persistence_x 2018-07-13
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
描述 级别 变量代码
Excel就是这样的数据, 要设计个表, 查询出来也是这样的结果, 我设计的表, VariableCode ID VariableName 名称 PVariableCode PID VariableFullName 变量名称
二月十六 2018-07-13
  • 打赏
  • 举报
回复
描述 级别 变量代码
二月十六 2018-07-13
  • 打赏
  • 举报
回复
那个查询结果是什么?怎么查询出来的?变量代码呢?
《程序设计方法》以Scheme语言为基础介绍计算和程序设计的一般理论和实践。《程序设计方法》由8个部分和7个独立的章节(第8、13、18、24、29、33、38章)组成。8个部分主要讨论程序设计,独立章节则介绍一些与程序设计和计算相关的话题。《程序设计方法》第1至第3部分介绍了基于数据驱动的程序设计基础。第4部分介绍了程序设计中的抽象问题。第5部分和第6部分是与递归及累积相关的内容。《程序设计方法》的最后两部分说明了设计程序的意义,阐述了如何应用前6个部分所描述的程序设计诀窍,以及使用赋值语句必须特别小心的一些问题。 《程序设计方法》可作为高等院校计算机科学与技术专业“程序设计导论”和“计算导论”的教材和教学参考书,也可作为函数式语言和Scheme语言的入门教材。 目录 · · · · · · 第一部分 简单数据的处理 第1章 学生、教师和计算机 3 第2章 数、表达式和简单程序 5 2.1 数和算术运算 5 2.2 变量和程序 6 2.3 字处理问题 9 2.4 错误 10 2.5 设计程序 12 第3章 程序就是函数加上变量定义 15 3.1 函数复合 15 3.2 变量定义 17 3.3 函数复合练习 18 第4章 条件表达式和函数 20 4.1 布尔类型和关系 20 4.2 函数和条件测试 22 4.3 条件和条件函数 25 4.4 条件函数的设计 27 第5章 符号信息 31 第6章 复合数据之一:结构体 34 6.1 结构体 34 6.2 补充练习:绘制简单图形 36 6.3 结构体定义 38 6.4 数据定义 41 6.5 设计处理复合数据的函数 43 6.6 补充练习:圆和长方形的移动 46 6.7 补充练习:刽子手游戏 49 第7章 数据的多样性 52 7.1 数据混合与区分 52 7.2 设计处理混合数据的函数 55 7.3 再论函数复合 58 7.4 补充练习:图形的移动 60 7.5 输入错误 61 第8章 语法和语义 63 8.1 Scheme的词汇 63 8.2 Scheme的文法 64 8.3 Scheme的含义 65 8.4 错误 68 8.5 布尔值表达式 70 8.6 变量定义 71 8.7 结构体的定义 72 第二部分 任意数目数据的处理 第9章 复合数据类型之二:表 77 9.1 表 77 9.2 任意长的表的数据定义 80 9.3 处理任意长的表 82 9.4 设计自引用数据定义的函数 84 9.5 更多关于简单表的例子 86 第10章 表的进一步处理 90 10.1 返回表的函数 90 10.2 包含结构体的表 93 10.3 补充练习:移动图片 98 第11章 自然数 100 11.1 定义自然数 100 11.2 处理任意大的自然数 101 11.3 补充练习:创建表,测试函数 103 11.4 自然数的另一种数据定义 104 11.5 更多与自然数有关的性质 108 第12章 三论函数复合 110 12.1 设计复杂的程序 110 12.2 递归的辅助函数 111 12.3 问题泛化与函数泛化 114 12.4 补充练习:字母的重新排列 117 第13章 用list构造表 119 第三部分 再论任意大数据的处理 第14章 再论自引用数据定义 125 14.1 结构体中的结构体 125 14.2 补充练习:二叉搜索树 131 14.3 表中的表 135 14.4 补充练习:Scheme求值 137 第15章 相互引用的数据定义 139 15.1 由结构体组成的表与结构体中的表 139 15.2 为相互引用的定义设计函数 144 15.3 补充练习:网页再谈 145 第16章 反复精化设计 147 16.1 数据分析 147 16.2 定义数据类型,再改进它们 148 16.3 改进函数和程序 150 第17章 处理两种复杂数据片段 152 17.1 同时处理两个表:第一种情况 152 17.2 同时处理两个表:第二种情况 154 17.3 同时处理两个表:第三种情况 156 17.4 函数的简化 159 17.5 设计读入两个复杂输入的函数 160 17.6 处理两个复杂输入的练习 161 17.7 补充练习:Scheme求值之二 164 17.8 相等与测试 165 第18章 局部定义和辖域 172 18.1 用local组织程序 172 18.2 辖域和块结构 183 第四部分 抽象设计 第19章 定义的相似性 189 19.1 函数的类似之处 189 19.2 数据定义的类似之处 195 第20章 函数也是值 199 20.1 语法和语义 199 20.2 抽象函数和多态函数的合约 200 第21章 抽象设计的例子 204 21.1 从实例中抽象 204 21.2 抽
  在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在it专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。    第3版的主要变化:    新增了van emde boas树和多线程算法,并且将矩阵基础移至附录。    修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。    移除两章很少讲授的内容:二项堆和排序网络。    修订了动态规划和贪心算法相关内容。    流网络相关材料现在基于边上的全部流。    由于关于矩阵基础和strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。    修改了对knuth-morris-pratt字符串匹配算法的讨论。    新增100道练习和28道思考题,还更新并补充了参考文献。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧