开发者社区> 问答> 正文

sql 动态行转列,会吗? 报错?报错

这个sql ,在 workbench可以查询出结果,  在springmvc mybatis 怎么执行这个诡异的sql 呢。 

  主要就是动态生成行转列

SET @EE='';

SELECT @EE :=CONCAT( @EE , 'SUM(IF(product_name=\'', product_name, '\'', ',1,0)) AS ', product_name,  ',') FROM  (SELECT  product_name  FROM  oa_product where del_flag=0) A; 
SET @QQ=CONCAT('SELECT  user_id, ',LEFT( @EE ,LENGTH(@EE)-1),' SUM(1) AS TOTAL from v_tp_order where status=4 group by user_id');  
PREPARE stmt2 FROM @QQ;
EXECUTE stmt2; 
这个sql 在mybatis 里面怎么执行呀

展开
收起
爱吃鱼的程序员 2020-06-12 14:41:33 586 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    纳泥,你竟然设置了变量

    但是你竟然@红薯了,那算了,本来我还想答来着

    这不是让我裤子脱了,妞却走了的感觉吗? @开源中国驻联合国理事 @开源中国驻联合国理事 @开源中国驻联合国理事 comeon

    把变量设置 SET@EE='';放到一个虚表里面

    改为多表查询eg: select*from (SELECT @num:=0, @type:='')r,A where xxxx

    怎么改成存储过程我是想通过
    SET@EE=''; 
    SELECT @EE:=CONCAT( @EE,'SUM(IF(product_name=\'',product_name,'\'',',1,0))AS',product_name, ',')FROM (SELECT product_name FROM oa_productwheredel_flag=0)A; 
    这个语句,动态生成列数,




    SET@QQ=CONCAT('SELECT user_id,',LEFT( @EE,LENGTH(@EE)-1),'SUM(1)ASTOTALfromv_tp_orderwherestatus=4groupbyuser_id'); 
    依据生成的列到这个视图里面去查询结果


    执行结果
    PREPAREstmt2FROM@QQ;
    EXECUTEstmt2; 
    @开源中国驻联合国理事

    @ kleen

    Mybatis存储过程 没有搞过,  抱歉

    你刚才说的那个方法,还是搞不定 <select id = "selectBlog" resultSets = "blogs,authors" resultMap = "blogResult" statementType = "CALLABLE" > {callgetBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})} </select>这个调存储过程,上面那个sql有两个返回语句,存储过程只返回第一个记录http://mybatis.github.io/mybatis-3/sqlmap-xml.html我这边是用函数解决的
    2020-06-12 14:41:49
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载
AnalyticDB基础版:云原生My SQL 敏捷数仓 立即下载
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载