0

这是我的问题:

我有未知数量的随机事件,每个事件都与一个状态编号相关联。现在我想要一个整体状态编号来描述随机事件分配的组合。例如,如果只有 2 个随机事件 V1 和 V2,每个都有 2 个可能的状态,那么下面是我的预期映射,大 V 是我预期的整体状态数。

V v1 v2

1 1  1

2 2  1

3 1  2

4 1  2

我的 sql 查询草稿是:

select t1.v1, t2.v2 from table1 as t1
  cross join table2 as t2

现在我想要从 t1.v1 和 t2.v2 生成的大 V。我知道数学算法,但不知道 SQL 代码。对于 2 个随机变量,数学算法将是 V = v1 + Max(v1)*(v2-1)。我的问题可能需要解决有超过 2 个随机变量的情况。

4

1 回答 1

1

为此,您可以使用子查询或窗口函数。我认为子查询可能更清楚:

select v1 + maxv1*(v2 - 1) as V, t1.v1, t2.v2
from table1 t1 cross join
     table2 t2 cross join
     (select max(v1) as maxv1 from t1) maxt

顺便说一句,您可以在 SQL 中很容易地分配一个序列号:

select row_number() over (order by v2, v1) as V, v1, v2
from table1 t1 cross join
     table2 t2
于 2013-03-05T00:26:05.410 回答