SET @i = 2;IF(@i=1) THEN
SELECT bs_product.productCode,bs_product.productName,bs_product.assetsName,bs_product.cycle,
bs_product.spec,bs_product.unitName,bs_product.address,bs_product.ovalue,bs_product.dotknow,
bs_product.status,bs_product.personName,bs_product.supperName,bs_product.buildCompanyName,
bs_product.useYear,bs_product.Subject,bs_product.subject1,bs_product.inWay,bs_product.assetsCode,
bs_product.quantity,bs_product.price,bs_product.re FROM bs_product
WHERE unitName LIKE '%%'
AND STATUS LIKE '%%' AND productCode LIKE '%%' AND productName LIKE '%%'
AND LTRIM((YEAR(NOW())-YEAR(dotknow))*12+(MONTH(NOW())-MONTH(dotknow))) LIKE '%%'
AND assetsName LIKE '%%'
AND ovalue <10000;
END IF;
IF(@i=2) THEN
SELECT bs_product.productCode,bs_product.productName,bs_product.assetsName,bs_product.cycle,
bs_product.spec,bs_product.unitName,bs_product.address,bs_product.ovalue,bs_product.dotknow,
bs_product.status,bs_product.personName,bs_product.supperName,bs_product.buildCompanyName,
bs_product.useYear,bs_product.Subject,bs_product.subject1,bs_product.inWay,bs_product.assetsCode,
bs_product.quantity,bs_product.price,bs_product.re FROM bs_product
WHERE unitName LIKE '%%'
AND STATUS LIKE '%%' AND productCode LIKE '%%' AND productName LIKE '%%'
AND LTRIM((YEAR(NOW())-YEAR(dotknow))*12+(MONTH(NOW())-MONTH(dotknow))) LIKE '%%'
AND assetsName LIKE '%%'
AND ovalue >=10000 OR ovalue <100000;
END IF;
IF(@i=3) THEN
SELECT bs_product.productCode,bs_product.productName,bs_product.assetsName,bs_product.cycle,
bs_product.spec,bs_product.unitName,bs_product.address,bs_product.ovalue,bs_product.dotknow,
bs_product.status,bs_product.personName,bs_product.supperName,bs_product.buildCompanyName,
bs_product.useYear,bs_product.Subject,bs_product.subject1,bs_product.inWay,bs_product.assetsCode,
bs_product.quantity,bs_product.price,bs_product.re FROM bs_product
WHERE unitName LIKE '%%'
AND STATUS LIKE '%%' AND productCode LIKE '%%' AND productName LIKE '%%'
AND LTRIM((YEAR(NOW())-YEAR(dotknow))*12+(MONTH(NOW())-MONTH(dotknow))) LIKE '%%'
AND assetsName LIKE '%%'
AND ovalue >=100000;
END IF;
--动态可以执行,但只有三个条件,有没可能直接用判断获取三个结果集,因为后边的ovalue条件是变动的。SET @i = 2;
SET @str = CASE WHEN @i = 1 THEN ' ovalue <10000 '
WHEN @i = 2 THEN ' ovalue >=10000 or ovalue <100000 '
WHEN @i = 3 THEN ' ovalue >=100000 ' END;SET @SQL = CONCAT('SELECT bs_product.productCode,bs_product.productName,bs_product.assetsName,bs_product.cycle,
bs_product.spec,bs_product.unitName,bs_product.address,bs_product.ovalue,bs_product.dotknow,
bs_product.status,bs_product.personName,bs_product.supperName,bs_product.buildCompanyName,
bs_product.useYear,bs_product.Subject,bs_product.subject1,bs_product.inWay,bs_product.assetsCode,
bs_product.quantity,bs_product.price,bs_product.re FROM bs_product
where unitName like ''','%%','''
and status like ''','%%',''' and productCode like ''','%%',''' and productName like ''','%%','''
and ltrim((year(now())-year(dotknow))*12+(month(now())-month(dotknow))) like ''','%%','''
and assetsName like ''','%%','''
and ',@str);
PREPARE stmt1 FROM @SQL;
EXECUTE stmt1;
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
--测试SQL/*条件一*/
select *
from tb
where val < 10000/*条件二*/
select *
from tb
where val >= 10000 and val < 100000/*条件三*/
select *
from tb
where val > 100000
--问题:写个IF的判断做查询,如帖子里提到的:
IF(条件一)
--第一个条件查询
IF(条件二)
--第二个条件查询
IF(条件三)
--第三个条件查询--问题关键:MYSQL中类似这种用IF如何写,SQL中可以直接在IF()后加查询语句,MYSQL怎么处理?
where (条件一 and val < 10000)
or (条件二 and val >= 10000 and val < 100000)
or (条件三 and val > 100000)