在sql中生成数据组合

在sql中生成数据组合,sql,sql-server,window-functions,cross-join,hana-sql-script,Sql,Sql Server,Window Functions,Cross Join,Hana Sql Script,我有一张像下面这样的桌子- 可乐 可乐 101 A. 102 B 102 C 102 D 103 C 103 E 这回答了问题的原始版本 如果我理解正确,我认为最简单的方法是将值放在一行上: select row_number() over (order by t1.col1, t2.col1, t3.col1), t1.col1, t1.col2, t2.col1, t2.col2, t3.col1, t3.col2 from t t1 join

我有一张像下面这样的桌子-

可乐 可乐 101 A. 102 B 102 C 102 D 103 C 103 E
这回答了问题的原始版本

如果我理解正确,我认为最简单的方法是将值放在一行上:

select row_number() over (order by t1.col1, t2.col1, t3.col1),
       t1.col1, t1.col2,
       t2.col1, t2.col2,
       t3.col1, t3.col2
from t t1 join
     t t2
     on t1.col1 < t2.col1 join
     t t3
     on t2.col1 < t3.col1;
选择上面的行数()(按t1.col1、t2.col1、t3.col1排序),
t1.col1,t1.col2,
t2.col1,t2.col2,
t3.col1,t3.col2
从t1连接
t2
关于t1.col1

如果愿意,可以取消这些结果。

可以在行的不同值之间进行笛卡尔乘积

select *
    from (select distinct COL1
          from yourTable) as t1,
         (select distinct COL2
          from yourTable) as t2

“我试过使用
滞后
领先
交叉连接
,但无法找到解决方案。”这些尝试是什么?为什么它们不起作用?这些组合是如何产生的<代码>1101、A1102、B1103、C
@venkataramannr-我需要一个SQL代码来生成这些组合。这就是我所要求的帮助。我的疑问是,为什么只考虑102,B而不是102,C或102,D?@VenkataramanR-他们被考虑了。请参见最后两个组合。ABC,ABE,ACC,ACE,ADC,ADE一个小小的改变奏效了。从t1上选择行号()(按t1.col1、t2.col1、t3.col1的顺序)、t1.col1、t1.col2、t2.col1、t2.col2、t3.col1、t3.col2从t1连接到t1.col1上的t2