SQL:通过置换起始项来扩展现有表

时间:2017-08-07 12:34:08

标签: sql combinations permutation vertica

我在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     |
+-------+-------+-------+

对于那种问题是否有优雅的解决方案,我尝试以各种方式加入,但到目前为止还没有运气。谢谢!

2 个答案:

答案 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

那应该给出相同的结果,不是吗?