请问当参数为空的时候,不执行对应查询该怎么写?

如下图所示,是我大概想要实现的目标,但是这样写是不对的。

当time4 或者 time3 等于 空时,直接不要该查询

${if(len(time4) == 0,"","

SELECT

SUM(IFNULL(number,0)) AS 数量,

SUM(IFNULL(amount,0)) AS 金额,

\"'" +time4 + " 23:59:59'\" AS 时间

FROM

( SELECT * FROM business_engineering_insert WHERE dateTime =LEFT(\"'" +time4 + " 23:59:59'\",10) AND type = 0 ) a

RIGHT JOIN ( SELECT id, NAME FROM fine_department WHERE id > 22 AND id < 44 ) b ON a.tableDep = LEFT ( b.`name`, 2 ) 

GROUP  BY

dateTime  ")}

UNION

${if(len(time3) == 0,"","

SELECT

SUM(IFNULL(number,0)) AS 数量,

SUM(IFNULL(amount,0)) AS 金额,

\"'" +time3 + " 23:59:59'\" AS 时间

FROM

( SELECT * FROM business_engineering_insert WHERE dateTime =LEFT(\"'" +time3 + " 23:59:59'\",10) AND type = 0 ) a

RIGHT JOIN ( SELECT id, NAME FROM fine_department WHERE id > 22 AND id < 44 ) b ON a.tableDep = LEFT ( b.`name`, 2 ) 

GROUP  BY

dateTime  ")}

FineReport yzm245758 发布于 2021-7-12 11:10
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-7-12 11:20

${if(len(time4) == 0,"","

SELECT

SUM(IFNULL(number,0)) AS 数量,

SUM(IFNULL(amount,0)) AS 金额,

'" +time4 + " 23:59:59' AS 时间

FROM

(SELECT * FROM business_engineering_insert WHERE dateTime =LEFT('" +time4 + " 23:59:59',10) AND type = 0 ) a

RIGHT JOIN ( SELECT id, NAME FROM fine_department WHERE id > 22 AND id < 44 ) b ON a.tableDep = LEFT ( b.`name`, 2 ) 

GROUP  BY

dateTime  ")}

UNION

${if(len(time3) == 0,"","

SELECT

SUM(IFNULL(number,0)) AS 数量,

SUM(IFNULL(amount,0)) AS 金额,

'" +time3 + " 23:59:59' AS 时间

FROM

( SELECT * FROM business_engineering_insert WHERE dateTime =LEFT('" +time3 + " 23:59:59',10) AND type = 0 ) a

RIGHT JOIN ( SELECT id, NAME FROM fine_department WHERE id > 22 AND id < 44 ) b ON a.tableDep = LEFT ( b.`name`, 2 ) 

GROUP  BY

dateTime  ")}

----大概是这个样子。另外dateTime =LEFT('" +time3 + " 23:59:59',10)为什么这个要加个时间然后再left 这不是time3的年月日么?把time3设置成数据库中的日期格式,再返回字符串不就完事了...

  • yzm245758 yzm245758(提问者) 这样不行,这感觉跟我写的没啥差别,现在最主要的是 这样写time3 为空的时候 语句变成了 union \"\" 就报错了
    2021-07-12 11:38 
  • Z4u3z1 Z4u3z1 回复 yzm245758(提问者) 把UNION 改到 if 里面 ${if(len(time3) == 0,\"\",\" UNION SELECT SUM(IFNULL(number,0)) AS 数量, SUM(IFNULL(amount,0)) AS 金额,
    2021-07-12 11:45 
最佳回答
0
xiaomingyiLv6中级互助
发布于2021-7-12 11:18(编辑于 2021-7-12 11:23)

给你一个参考,你这个sql其实可以写成两个数据集,再用关联数据集union起来

图片.png

  • 2关注人数
  • 365浏览人数
  • 最后回答于:2021-7-12 11:23
    请选择关闭问题的原因
    确定 取消
    返回顶部