【问题标题】:MySQL, move data from rows to columnsMySQL,将数据从行移动到列
【发布时间】:2013-01-11 19:23:10
【问题描述】:

我有一个 MySQL 表,其中包含以下数据:

id    userid    fieldid    data
--    ------    -------    ----
 1    186       1          London
 2    186       3          Accountant
 3    186       5          Joe Jones
 4    206       1          Paris
 5    206       5          Mark Smith
 6    210       1          Berlin
 7    210       2          0020
 8    210       3          Farmer
 9    210       4          000-000-0000
10    210       5          Bill Johnson

等等

我最终想要的是另一个表格,其中的数据根据​​用户 ID 格式化为行:

userid   Region    Acct    Title         Phone           Name
------   ------    ----    -----         -----           ----
  186    London    NULL    Accountant    NULL            Joe Jones
  206    Paris     NULL    NULL          NULL            Mark Smith
  210    Berlin    0020    Farmer        000-000-0000    Bill Johnson

我不需要 SELECT 语句...我知道如何使用 GROUP_CONCAT 查看数据。我说的是另一个表(可能是一个虚拟表?),数据按行排列。

我不介意引用行名和列名的脚本,但我不想引用特定的数据字段(即 - 如果 row_data = London 移动到 column1)。

我宁愿说“IF fieldid = 1 然后将 'data' 移动到 new_table.column1”之类的话,但我一点也不知道该怎么说。

有人可以帮忙吗?

【问题讨论】:

  • 好吧,如果您知道如何使用 select 语句执行此操作,则使用相同的 select 并将数据推送到临时表或物理表(无论您需要哪个)。没有?
  • 您是否有一个引用每个 FieldId 的表,以便您知道名称应该是什么?您真的要将此数据存储在表中吗?您可以根据需要对其进行改造。
  • 问题是我试图在脚本中使用“WHERE region = London”,但这会过滤掉所有其他行(如姓名和电话号码)。除了创建一个表格,其中所有内容都在单独的列中而不是堆叠在 1 行中,我不知道如何以任何其他方式执行此操作。

标签: mysql select group-by pivot-table


【解决方案1】:

试试这个:

CREATE TABLE `temptable` AS 
SELECT userid, MAX(IF(fieldid =1, DATA, NULL)) Region, 
       MAX(IF(fieldid=2, DATA, NULL)) Acct, MAX(IF(fieldid =3, DATA, NULL)) Title, 
       MAX(IF(fieldid=4, DATA, NULL)) Phone, MAX(IF(fieldid =5, DATA, NULL)) `Name` 
FROM tablename 
GROUP BY userid

【讨论】:

    【解决方案2】:

    这个怎么样:

    create table mynewtable as
    (the select statement you already know )
    

    【讨论】:

    • 这个语句把每一项都塞进一列。我希望每个行项目都在一个单独的列中。
    • 好吧 - 我以为你说你已经知道 sql 来做那部分 - 抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-02-20
    • 2012-05-27
    • 2015-10-28
    • 2021-01-17
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多