【发布时间】:2012-06-11 03:09:37
【问题描述】:
我有一个旧的用户信息表(仍在使用中),我无法更改 -
id name value
------------------------------
0 timezone Europe/London
0 language en
0 country 45
0 something x
1 timezone Europe/Paris
1 language fr
1 country 46
时区/语言/国家等只是名称的示例,它们可以是可变的/除了该列的行上唯一之外没有有限列表
我需要一个与 MySQL 兼容的 SQL 查询,它会返回 -
id timezone language country something
---------------------------------------------------
0 Europe/London en 45 x
1 Europe/Paris fr 46
我已经查看了有关将数据透视表功能入侵到 MySQL 的 stackoverflow 上的各种答案,类似但没有一个似乎与使用来自同一表列的唯一行值的变量列名别名的情况相匹配。虽然我睡得很少,所以他们都开始变得有点模糊,提前道歉。
我能找到的最接近的方法是使用准备好的语句https://stackoverflow.com/a/986088/830171,它首先从名称列中获取所有可能/唯一的值,并构建一个使用CASE WHEN 和/或多个子SELECT 或@987654326 的查询@ 在同一个表查询上。
我能想到的替代方法是获取该用户 ID 的所有行并在应用程序本身中在 for 循环中处理它们,或者尝试将名称限制为有限数量并使用 sub-SELECTs /JOINs。但是,如果添加了新名称,则第二个选项并不理想,我必须重新访问此查询。
请告诉我我遗漏了一些明显的东西
【问题讨论】:
-
您真的需要在
sql中表达这一点,还是使用您选择的编程语言进行后处理就足够了?如果你需要加入你的去伪数据,那么视图/过程可能是诀窍。 -
是的,我暂时将混乱保留在应用程序级别 - 我将获取该用户 ID 的所有行并循环将数据放入关联数组中。我只是想检查一下这是唯一的好选择。使用 SQL 方法进行迁移和一次性报告仍然非常方便。
标签: mysql sql pivot-table