mysql - 如何从表的行中获取变量到列表中? (示例)(数据透视表?)

标签 mysql sql pivot

我无法用语言解释我的问题。这就是为什么我的表格示例:

假设我想要一个像这样的结果表:

user_id |data_a |data_b
1       |hello  |world

我需要以这种形式将其从“数据集”表中提取出来

data_id |user_id|data_type  |data_data
1       |1      |data_a     |hello
2       |1      |data_c     |xxx
3       |2      |data_a     |xxx
4       |1      |data_b     |world

我做了一些事情

SELECT user_id , data_a, data_b
FROM dataset
WHERE ( data_type = data_a OR data_type = data_b )
AND user_id = 1

AND a = ( SELECT data_data WHERE data_type = data_a )
AND b = ( SELECT data_data WHERE data_type = data_b )

但是它不起作用。我知道我做错了,但我不知道该怎么做,也不知道它是怎么称呼的。我认为是一张私有(private) table ,但我不确定 这就是为什么描述如此含糊,我希望有人能理解。

最佳答案

这基本上是一个 PIVOT 但 MySQL 没有 PIVOT 函数,因此您可以使用聚合函数和 CASE 语句复制它.所以你的 SQL 将是这样的:

select user_id,
  max(case when data_type = 'data_a' then data_data end) data_a,
  max(case when data_type = 'data_b' then data_data end) data_b
from dataset
group by user_id

参见 SQL Fiddle with Demo

结果:

| USER_ID | DATA_A | DATA_B |
-----------------------------
|       1 |  hello |  world |
|       2 |    xxx | (null) |

关于mysql - 如何从表的行中获取变量到列表中? (示例)(数据透视表?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13460453/

相关文章:

SQL查询以计算每月总计作为一列

mysql - 如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

php - SQL 根据表中最新的 150 个条目计算元素

mysql - 使用openquery插入MySql表错误: "Cannot start more transactions"

ios - NSPredicate 和 BEGINSWITH 与 CloudKit : Field value type mismatch

SQL - 不使用EXISTS引入子查询时,select列表中只能指定一个表达式

python - 将 df 列反透视为多列和多行

sql - 在 T-SQL 中透视数据

php - 如何用php在mysql中进行搜索?

mysql - 将文本从一个表插入到另一个表中