from 表名(表名是  固定部分+${机台})

from 表名(表名是  固定部分+${机台},例如 Z_ED_LD014_01)

如大机台编号 LD014 ,但是报表界面要显示A部分数据 用到机台是LD014_01 和 B部分数据  用到机台是LD014_02   

想要实现输入LD014 带出 LD014_01机台和LD014_02的数据(即A部分和B部分数据)

且不是所有的大机台(LD014) 都会有两个小机台(LD014_01和LD014_02),有些只有一个,数据库存储的数据是以一个小机台一张表的形式存储数据的

但是输入只想输入LD014  ,要怎么实现呢

FineReport 13182656102 发布于 2019-11-12 18:56 (编辑于 2019-11-12 19:01)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
nanxi111Lv5见习互助
发布于2019-11-13 09:11(编辑于 2019-11-13 09:35)

是sql server还是mysql,sqlserver简单点,可以用if判断一下表是否存在

图片.png


图片.png,如果是mysql的话就要麻烦一点,mysql不支持流程控制语句,只能存储过程或者先利用帆软参数和语句拼接来执行,比如  if(${a}>0,"select ...","select...")



orcale的实现思路

图片.png


  • 13182656102 13182656102(提问者) 是 oracle 。。。。
    2019-11-13 09:13 
  • nanxi111 nanxi111 回复 13182656102(提问者) oracle也是支持控制流程语句的,可以用if else 来实现,方法和上面的sql server差不多,可能语法上稍微有点不一样
    2019-11-13 09:22 
最佳回答
0
黄源Lv6中级互助
发布于2019-11-13 08:41(编辑于 2019-11-13 09:33)

 SELECT table_name FROM user_tab_columns where table_name like 'Z_ED_LD014_%'; 查出有几个表

这个建议用存储过程好做判断

表名用sql()函数查出来

  • 13182656102 13182656102(提问者) 小机台最多有两个,如果报表只是想要A或者B部分数据,那么我只要把表名做参数就好了,现在是A和B数据在同一个页面,我需要全部显示,但是人家又不想输入机台全称,只想输入小机台前面一部分,如果01和02缺少任意一个,都是以大机台LD014显示的 需要存储过程吗?可能没有这么复杂
    2019-11-13 08:54 
  • 黄源 黄源 回复 13182656102(提问者) 直接用这个sql查出表面也可以,但是多表取值会是笛卡尔积
    2019-11-13 09:32 
最佳回答
0
hpmpkkLv3中级互助
发布于2019-11-13 08:44

你这数据库设置不合理啊,小机台的表有几张都不知道,这怎么查,你有维护 大机台和小机台关系的表也行啊

  • 13182656102 13182656102(提问者) 小机台最多有两个,如果它只是想要A或者B部分数据,那么我只要把表名做参数就好了,现在是A和B数据在同一个页面,我需要全部显示,但是人家又不想输入机台全称,只想输入小机台前面一部分,如果01和02缺少任意一个,都是以大机台LD014显示的
    2019-11-13 08:54 
  • hpmpkk hpmpkk 回复 13182656102(提问者) 只有两个的话就拼一下,select * from 表名(表名是 ${你输入的表名}+固定小机台1) union all select * from 表名(表名是 ${你输入的表名}+固定小机台2)
    2019-11-13 09:03 
  • 13182656102 13182656102(提问者) 回复 hpmpkk 谢啦,我分了两个数据集解决,现在测试,到时候看看效果
    2019-11-13 10:14 
  • 4关注人数
  • 556浏览人数
  • 最后回答于:2019-11-13 09:35
    请选择关闭问题的原因
    确定 取消
    返回顶部