sql 动态行转列,会吗? 报错?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

爱吃鱼的程序员 2020-06-12 14:41:33 51

这个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 里面怎么执行呀

SQL Java 数据库连接 mybatis
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-12 14:41:49

    纳泥,你竟然设置了变量

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

    这不是让我裤子脱了,妞却走了的感觉吗? @开源中国驻联合国理事 @开源中国驻联合国理事 @开源中国驻联合国理事 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我这边是用函数解决的
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题