Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

1楼
km007 发表于: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楼
有点蓝 发表于: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 
3楼
km007 发表于: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楼
有点蓝 发表于:2023/11/14 16:27:00
先查询获取最大的级别,然后遍历动态生成sql
5楼
km007 发表于:2023/11/14 16:34:00
我懂了,谢谢您
6楼
km007 发表于: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  如何写呢?

7楼
km007 发表于: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 
8楼
km007 发表于: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楼
有点蓝 发表于:2023/11/15 16:53:00
用不了,AddTable只能添加表,无法使用sql
10楼
km007 发表于:2023/11/15 16:55:00
那就是说只能 老老实实 的写SQL语句了
共11 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.