行列互换问题解决方法与原理-综合交流区论坛-低代码平台-本牛千智|专注WorkFine

行列互换问题解决方法与原理

原理讲解

【题目】

下面是表名为cook的表

要求查询结果如下:

【解题思路】

电影《女男变错身》中是男女互换身份

这个题其实也是“互换身份”,叫做行列互换问题,就是将一维表转化为二维表。

1.输出行列互换的表结构

可以看出,需要输出的有5列,其中只有“年”这一列是表cook中原有的,其他4列(也就是2-5列:m1对应的是1月份、m2对应的是2月份、m3对应的是3月份、m4对应的是4月份)需要自己创建。

select 年,m1,m2,m3,m4
from cook;

可以看出查询结果和目标表的列名结构一样,但是2-5列(m1、m2、m3、m4)的值不是题目要求的:

2. 如何将2-5列的值替换成对应的值?

可以用case语句进行条件判断来替换。

年份和月份匹配,则为对应值,不匹配则为0。

select 年,
(case 月 when '1' then 值 else 0 end) as m1,
(case 月 when '2' then 值 else 0 end) as m2,
(case 月 when '3' then 值 else 0 end) as m3,
(case 月 when '4' then 值 else 0 end) as m4
from cook;

在这个查询结果中,每一行表示某年某月的某个值。比如第一行是2009年 1月份(m1)的值,而其他三列m2、m3、m4的值为0。

第二行是2009年 2月份(m2)的值,而其他三列的值为0。其他行以此类推。

又向目标接近了一步,但是多出来的0值,怎么办?

3.去掉0值,简化表格的行数

请登录后发表评论

    请登录后查看回复内容