excel 单元格引用的复制功能(或多个视图的计算)

Replicating functionality of excel cell referencing (or calculations over multiple views)

我有一个包含 3 列的 table,其中包含多个数据流,全部在一个 table 中。

val_name 是数据流的名称,val_sequence 是递增的序列号,val 包含数据。组合 namesequence 就像一个复合索引。

此table中现有的val_name个流是a、b。我希望用户能够请求流 c(不在 table 中),并且数据库能够动态地请求 return a*b。

a*b 在这种情况下就像乘以两个 tables,一个只包含 val_name a,另一个 val_name b,然后加入 val_sequence(很像乘索引 python pandas 系列)。

所以结果是:

val_sequence val_name val 
0            c        80
1            c        5

想法是用户应该能够请求 a 或 b 或 c 并接收数据,而无需知道 a 和 b 保存数据,而 c 仅保存引用。中间或两端可能缺少一些序列号。

我还没有找到提供这种灵活性的好方法。 SQL 视图是否足够灵活?如果是这样,你能给我一个简单的例子吗?如果不是,什么可能是可行的替代方案?您选择的任何数据库引擎都可以。

为方便起见,我提供了 SQL 代码来创建 table 并插入以上值,并创建两个视图。这并不能满足我的需要,但对于那些想要尝试的人来说,这是一个开始。

CREATE TABLE  IF NOT EXISTS valdb (
  val_name VARCHAR(255), 
  val INT, 
  val_sequence  int
);

INSERT into valdb (val_name, val, val_sequence) VALUES ("a",10,0);
INSERT into valdb (val_name, val, val_sequence) VALUES ("a", 1,1);

INSERT into valdb (val_name, val, val_sequence) VALUES ("b", 8,0);
INSERT into valdb (val_name, val, val_sequence) VALUES ("b", 5,1);

CREATE VIEW `a` AS SELECT val_name, val, val_sequence from valdb WHERE val_name = "a" ;
CREATE VIEW `b` AS SELECT val_name, val, val_sequence from valdb WHERE val_name = "b" ;

如果,正如您所建议的那样,保证两个流的序列号相同,即当且仅当 n 存在 a 一个n 也存在于 b,这将是序列号的内部连接和 * 运算符以获得乘法。

CREATE VIEW c
AS
SELECT 'c' val_name,
       a.val_sequence,
       a.val * b.val val
       FROM a
            INNER JOIN b
                       ON a.val_sequence = b.val_sequence;

db<>fiddle(根据您提供的代码的语法假设 MySQL)

如果假设不成立,您需要定义在假设失败的情况下应该发生什么。例如。是否获取下一个可用序列号以及 ab 是否提供 "leading" 序列号,或者如果 val 应该假设为 0 丢失序列数字等..