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;

解决方案 »

  1.   

    起到类似的作用,SQL可以直接这么写,能够获取结果集,MYSQL该如何些。
      

  2.   


    --动态可以执行,但只有三个条件,有没可能直接用判断获取三个结果集,因为后边的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;
      

  3.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   

    不用考虑表结构数据什么的,意思是这样:
    --测试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怎么处理?
      

  5.   

    select * from tb
    where (条件一 and val < 10000)
    or (条件二 and val >= 10000 and val < 100000)
    or (条件三 and val > 100000)
      

  6.   

    MYSQL这样也可以?如果用if呢?语法是怎样来实现的。
      

  7.   

    IF THEN在MYSQL中只能放在存储过程中使用。SQL语句中则可以使用IF函数。