Foxtable(狐表)用户栏目专家坐堂 → [原创]请问如何通过SQL生成一个动态表格


  共有3339人关注过本帖树形打印复制链接

主题:[原创]请问如何通过SQL生成一个动态表格

帅哥哟,离线,有人找我吗?
km007
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
[原创]请问如何通过SQL生成一个动态表格  发帖心情 Post By:2023/11/14 16:01:00 [只看该作者]

如下表(产品表A)字段内容,产品分类和产品名称 都在同一个表中,JB字段有可能是N级,该字段最大值 的行则为 产品名称数据,其他均为 产品分类

id(产品ID)                     name(产品名称)         sjid(上级ID)               jb(级别)

0001                               化妆品                           0                                1
0002                               日用品                           0                                1
0003                               家电                              0                                1
……
00010001                        家护系列                        0001                           2
00010002                        防晒系列                        0001                           2
00010003                        美白系列                        0001                           2
……
00020001                        环保系列                        0002                           2
……
00030001                        电视                              0003                           2
00030002                        热水器                           0003                           2
00030003                        煤气炉                           0003                           2
……
000100010001                 洗面奶                           00010001                    3
000100010002                 身体乳                           00010001                    3
000300010001                 液晶电视                        00030001                    3
000300010002                 智能电视                        00030001                    3
……
0001000100010001          芦荟洗面奶150ml            000100010001             4
0001000100010002          牛奶身体乳750ml            000100010002             4
0003000100010001          创维液晶65寸电视            000100010002             4
0003000100010002          TCL液晶65寸电视            000100010002             4
……



需求:我想通过上表 生成如下表格式,请问这个如何直接通过一句SQL语句实现呢?

图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110792 积分:563898 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/14 16:11:00 [只看该作者]

select d.id,d.name,a.name as 一级分类,b.name as 二级分类,c.name as 三级分类 from (select id,name from 表A where jb=1) As a inner join  (select id,name,sjid from 表A where jb=2) As b on a.id = b.sjid inner join  (select id,name,sjid from 表A where jb=3) As c on b.id = c.sjid  inner join  (select id,name,sjid from 表A where jb=4) As d on c.id = d.sjid 

 回到顶部
帅哥哟,离线,有人找我吗?
km007
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/14 16:19:00 [只看该作者]

以下是引用有点蓝在2023/11/14 16:11:00的发言:
select d.id,d.name,a.name as 一级分类,b.name as 二级分类,c.name as 三级分类 from (select id,name from 表A where jb=1) As a inner join  (select id,name,sjid from 表A where jb=2) As b on a.id = b.sjid inner join  (select id,name,sjid from 表A where jb=3) As c on b.id = c.sjid  inner join  (select id,name,sjid from 表A where jb=4) As d on c.id = d.sjid 

但是  jb(级别)这个字段是动态的,有可能不断的添加到 N,那么这样的话,这句SQL如何改呢


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110792 积分:563898 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/14 16:27:00 [只看该作者]

先查询获取最大的级别,然后遍历动态生成sql

 回到顶部
帅哥哟,离线,有人找我吗?
km007
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/14 16:34:00 [只看该作者]

我懂了,谢谢您

 回到顶部
帅哥哟,离线,有人找我吗?
km007
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/15 16:38:00 [只看该作者]

以下是引用有点蓝在2023/11/14 16:11:00的发言:
select d.id,d.name,a.name as 一级分类,b.name as 二级分类,c.name as 三级分类 from (select id,name from 表A where jb=1) As a inner join  (select id,name,sjid from 表A where jb=2) As b on a.id = b.sjid inner join  (select id,name,sjid from 表A where jb=3) As c on b.id = c.sjid  inner join  (select id,name,sjid from 表A where jb=4) As d on c.id = d.sjid 

请问这句要改成  SQLJoinTableBuilder  如何写呢?


 回到顶部
帅哥哟,离线,有人找我吗?
km007
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/15 16:47:00 [只看该作者]

……
jb1.Add Table("s elect id,name from cs_cpb where jb=1", "id", "s elect id,name,sjid from cs_cpb where jb=2", "sjid")
jb1.Add Table("s elect id,name,sjid from cs_cpb where jb=2", "id", "s elect id,name,sjid from cs_cpb where jb=3", "sjid")
jb1.Add Table("s elect id,name,sjid from cs_cpb where jb=3", "id", "s elect id,name,sjid from cs_cpb where jb=4", "sjid")
……
Dim sl As String = jb1.BuildSQL()
Output.Show(sl)


主要是红色字体那里 如何加上 as 

 回到顶部
帅哥哟,离线,有人找我吗?
km007
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/15 16:48:00 [只看该作者]

Dim jb1 As New SQLJoinTableBuilder("临时表2", "s elect id,name from cs_cpb where jb=1")
'Dim dt1 As fxDataSource
jb1.Conne ction Name = "数据源名称"
jb1.AddTable("s elect id,name from cs_cpb where jb=1", "id", "s elect id,name,sjid from cs_cpb where jb=2", "sjid")
jb1.AddTable("s elect id,name,sjid from cs_cpb where jb=2", "id", "s elect id,name,sjid from cs_cpb where jb=3", "sjid")
jb1.AddTable("s elect id,name,sjid from cs_cpb where jb=3", "id", "s elect id,name,sjid from cs_cpb where jb=4", "sjid")
jb1.AddExp("一级分类", "a.name")
jb1.AddExp("二级分类", "b.name")
jb1.AddExp("三级分类", "c.name")
jb1.AddExp("产品名称", "d.name") 
'dt1 = jb1.BuildDataSource()
'dt1.Show("临时表2") '显示统计结果
Dim sl As String = jb1.BuildSQL()
Output.Show(sl)


主要是红色字体那里 如何加上 as 
[此贴子已经被作者于2023/11/15 16:49:47编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110792 积分:563898 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/15 16:53:00 [只看该作者]

用不了,AddTable只能添加表,无法使用sql

 回到顶部
帅哥哟,离线,有人找我吗?
km007
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:480 积分:5767 威望:0 精华:0 注册:2016/1/28 2:59:00
  发帖心情 Post By:2023/11/15 16:55:00 [只看该作者]

那就是说只能 老老实实 的写SQL语句了

 回到顶部
总数 11 1 2 下一页