我在vertica数据库中有一个N x M
表,我的目标是创建一个带有N*M x M
的新表,以便初始表中的每一行都被M行替换,其中起始项是permeated 。
以下是2 x 3
表
+-------+-------+-------+
| Item1 | Item2 | Item3 |
+-------+-------+-------+
| A | B | C |
| C | K | L |
+-------+-------+-------+
成为6 x 3
表,其中原始行中的每一行都被3个新行替换,其中Item1始终是不同的起始项。
+-------+-------+-------+
| Item1 | Item2 | Item3 |
+-------+-------+-------+
| A | B | C |
| B | A | C |
| C | A | B |
| C | K | L |
| K | C | L |
| L | C | K |
+-------+-------+-------+
对于那种问题是否有优雅的解决方案,我尝试以各种方式加入,但到目前为止还没有运气。谢谢!
答案 0 :(得分:1)
在一般情况下,我无法帮助你。在特定情况下,这可以在Vertica中使用吗?
select
case n
when 1 then item1
when 2 then item2
else item3
end as item1,
case n
when 1 then item2
when 2 then item3
else item1
end as item2,
case n
when 1 then item3
when 2 then item1
else item2
end as item3
from tab
cross join (select 1 as n union all select 2 as n union all select 3 as n) as b
我自己就是一个SQL Server人,并且可以直接从表的定义动态地进行查询(给出对表元数据的合理约束),但是,我不知道Vertica
答案 1 :(得分:0)
我在想为什么不只是使用像这样的一堆工会
SELECT Item1, Item2, Item3 from Table
union SELECT Item2, Item3, Item1 from Table
UNION SELECT Item3, Item1, Item2 from Table
那应该给出相同的结果,不是吗?