gpt4 book ai didi

sql - 在不使用 UNIONS 的情况下使用 MySQL 将行转换为列?

转载 作者:行者123 更新时间:2023-11-30 21:22:56 24 4
gpt4 key购买 nike

我有一个类似于下面的表格:

       id |        cat |         one_above |        top_level | 
0 'printers' 'hardware' 'computers'

我希望能够编写一个查询,不使用联合,它将返回一个结果集,该结果集将此表的列转换为行。这意味着,我希望结果是:

       id |          cat |
0 'printers'
0 'hardware'
0 'computers'

这在 MySQL 中可行吗?我不能下降到应用程序层并执行此操作,因为我将这些输入到将基于 id 编制索引的搜索引擎中。其他各种 DBMS 都有 PIVOT 和 UNPIVOT 之类的东西。如果对我遗漏的东西有任何见解,我将不胜感激。

马哈茂德

附言

我正在考虑将数据库的重新规范化作为最后的选择,因为这不是一项微不足道的任务。

谢谢!

最佳答案

这是我从书上得到的The Art of SQL , 第 284-286 页:

假设您的表名称是 foo

首先,创建一个名为pivot 的表:

CREATE Table pivot (
count int
);

在该表中插入与要在 foo 中转换的列一样多的行。由于 foo 中有三列要进行透视,因此在透视表中创建三行:

insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);

现在在 foopivot 之间进行笛卡尔连接,使用 CASE 根据计数选择正确的列:

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;

这应该给你你想要的。

关于sql - 在不使用 UNIONS 的情况下使用 MySQL 将行转换为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com