Transpose a row into columns with MySQL without using UNIONS?
我有一个类似于下面的表格:
1
2 |
id | cat | one_above | top_level |
0 ‘printers’ ‘hardware’ ‘computers’ |
我希望能够在不使用联合的情况下编写一个查询,它将返回一个结果集,该结果集将该表的列转换为行。这意味着,我希望结果是:
1
2 3 4 |
id | cat |
0 ‘printers’ 0 ‘hardware’ 0 ‘computers’ |
这在 MySQL 中可能吗?我无法下拉到应用程序层并执行此操作,因为我将这些输入到将基于 id 进行索引的搜索引擎中。其他各种 DBMS 都有 PIVOT 和 UNPIVOT 之类的东西。我将不胜感激任何对我遗漏的东西的洞察力。
马哈茂德
附言
我正在考虑将数据库的重新规范化作为最后的选择,因为这不是一项简单的任务。
谢谢!
我从《SQL 的艺术》一书中得到这个,第 284-286 页:
假设你的表名是
首先,创建一个名为
的表
1
2 3 |
CREATE TABLE pivot (
COUNT INT ); |
在该表中插入与要在
1
2 3 |
INSERT INTO pivot VALUES (1);
INSERT INTO pivot VALUES (2); INSERT INTO pivot VALUES (3); |
现在在
1
2 3 4 5 6 |
SELECT foo.id, CASE pivot.count
WHEN 1 THEN cat WHEN 2 THEN one_above WHEN 3 THEN top_level END CASE FROM foo JOIN pivot; |
这应该会给你你想要的。
经过一些相当广泛的挖掘后,我偶然发现了这个页面,它可能包含也可能不包含您的答案。这在 MySQL 中是一个难题,但从概念的angular来看,我可以构造一个查询,使用 describe 像这样进行转置(尽管它可能会执行得很糟糕)。所以我确信我们可以找到一种正确的方法。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/271014.html