MySQL存储过程中使用动态行转列

2019-01-04 17:00:30刘景俊

嗯,对比上面简单的SQL语句可以看出,这里使用了 if 语句,对学号进行了判断

不过这里要注意一点,这里的if语句不像我们平时java啊那种写法也就是下面

if(条件)
{
    要执行的语句块
}
对,在SQL里面的if语句不一样,不需要括号啊什么的,就像直接说英文一样

IF @stuid is not null and @stuid != 0 then SET @sql = CONCAT(@sql, ' Where st.stuid = ''', @stuid, ''''); END IF;

 嗯,就是这么简单明了,如果条件满足,那么就怎么样,然后结束。

然后我们就可以传参数调用这个SP了

CALL `SP_QueryData`('1001');

得到如下结果


当然我们也可以直接传个空串过去

CALL `SP_QueryData`('');

同样得到我们想要的结果

好了,以上就是这次我在MySQL进行动态行转列的实现过程。

总结及问题

开始的时候,只想到要行转列,写着写着突然发现要动态的,因为我不确定到底有多少列。
在网上各种找资料,然而看不太懂!

后来,参考了Pivot table with dynamic columns in MySQL这个,才写出来的。

然后是各种问题,先是SQL语句中加入if条件,我像平时写java那样,发现并没有什么用,网上也说就是这种

IF(stuid is not null && stuid <> '') then SET @stuid = stuid; SET @sql = CONCAT(@sql, ' Where st.stuid = '', @stuid, '''); END IF;

可是我这么写了之后并没有什么用,还是报错,找了不少之后才发现原来不是这么写的,然后改了过来。

改完之后我以为可以了,可是,发现依旧不行。然后我就在想是不是这里不能用if判断,因为不是一个function或者procedure,于是我就写创建procedure的语句。

改造完之后,procedure成功的创建了。那创建完我就试试能不能,调用procedure之后,当当当当,结果出来了。

嗯,这个过程还是收获很多的,对MySQL的行转列,以及存储过程,还有在SQL语句中的使用不一样的地方等。
而且,这个行转列的实现了之后,这个项目基本上没啥大问题了对数据的处理,相当好啊,哈哈~

以上就是我在行转列实现的过程中所有的内容,相对来说,我觉得,这里写的很清楚很明了了,所以只要你有耐心看完并认真研究的话,这个内容对你的行转列还是有很大裨益的。