当前位置: 首页 > 面试题库 >

MySql换行成列和列成行[重复]

颛孙铭
2023-03-14
问题内容

这个问题已经在这里有了答案

如何在MySQL中返回数据透视表输出? (8个答案)

6年前关闭。

我在将行移至列和将列移至行时遇到问题。如果只是将行转置为列或将列转置为行,则可以这样做。

这是我的数据表

UNIT|JAN|FEB|MAR|APR|MEI|JUN
CS-1|100|200|300|400|500|600
CS-2|111|222|333|444|555|666
CS-3|331|123|423|923|918|123

我想得到以下输出

MONTH|CS-1|CS-2|CS-3
JAN  |100 |111 |331
FEB  |200 |222 |123
MAR  |300 |333 |423

等等..

有人知道该怎么做吗?非常感谢!


问题答案:

你可以这样

SELECT month,
       MAX(CASE WHEN unit = 'CS-1' THEN value END) `CS-1`,
       MAX(CASE WHEN unit = 'CS-2' THEN value END) `CS-2`,
       MAX(CASE WHEN unit = 'CS-3' THEN value END) `CS-3`
  FROM
(
  SELECT unit, month,
         CASE month 
            WHEN 'JAN' THEN jan
            WHEN 'FEB' THEN feb
            WHEN 'MAR' THEN mar
            WHEN 'APR' THEN apr
            WHEN 'MAY' THEN may
            WHEN 'JUN' THEN jun
         END value
    FROM table1 t CROSS JOIN
  (
    SELECT 'JAN' month UNION ALL
    SELECT 'FEB' UNION ALL
    SELECT 'MAR' UNION ALL
    SELECT 'APR' UNION ALL
    SELECT 'MAY' UNION ALL
    SELECT 'JUN'
  ) c
) q
 GROUP BY month
 ORDER BY FIELD(month, 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN')

输出:

| MONTH | CS-1 | CS-2 | CS-3 |
| ------- | ------ | ------ || ------ |
| 一月 100 | 111 | 331 |
| 2月| 200 | 222 | 123 |
| MAR | 300 | 333 | 423 |
| 年利率| 400 | 444 | 923 |
| 五月| 500 | 555 | 918 |
| 俊| 600 | 666 | 123 |

这是 SQLFiddle 演示



 类似资料:
  • 问题内容: 有人可以帮忙我的SQL吗? 我有一个表,其中包含诸如: 如何编写SQL查询以获取以下输出? 问题答案: 试试这个:

  • 在MySql中的SQL语句中,可以轻松地使用以下方法创建一行值: 选择1、2、3、4、5、6、7、8、9、10; 这将生成包含从1到10的数字的单行,但是否可能有包含这些值的单列。

  • 假设我有三个不同的MySQL表: 表: 表: 表: 我想要得到一个表,合作伙伴在行和产品作为列。到目前为止,我能够得到如下输出: 使用此查询: 但我更想要这样的东西: 问题是,我无法告诉我将拥有多少个产品,因此需要根据products表中的行动态更改列号。 这个很好的答案似乎并不适用于MySQL:T-SQL Pivot?从行值创建表列的可能性

  • 问题内容: 可以说我有三个不同的MySQL表: 表: 表: 表: 我想得到一个表格,其中行和产品列为合作伙伴。到目前为止,我已经能够获得如下输出: 使用此查询: 但我想改成这样: 问题是我无法知道我将拥有多少个产品,因此列号需要根据产品表中的行动态更改。 这个很好的答案似乎不适用于mysql:T-SQL Pivot吗?根据行值创建表格列的可能性 问题答案: 不幸的是,MySQL没有您基本上想做的功

  • 问题内容: 如何将(未知)行数分组为由设置的列确定分组的单行? 例如,换档 进入 谢谢你的帮助 问题答案: 您可以使用row_number()作为列名称的源来透视表: 如果您有更多的行,只需扩展数字列表即可。 实时测试是@Sql Fiddle。

  • 问题内容: 我有很多表要与联接合并,但是这样,结果将返回许多行,而我希望将它们作为新列生成。 member_dependent_information表 MySQL查询: 理想结果 实际结果 虽然我的查询在多行中返回“正确”数据,但并没有根据需要将结果合并为一行。 下面已经提到了有关数据透视表/交叉表的建议,但是我能够找到的每个参考都建议使用数学计算,或者知道要返回的字段数。我将不知道此信息,因为