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

时间:2019-05-25 18:40:57

标签: sql sql-view

我有一个包含3列的表,该表在一个表中都包含许多数据流。

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

enter image description here

此表中现有的val_name流是a,b。我希望用户能够请求流c(不在表中),并且数据库可以动态返回a * b。

在这种情况下,

a * b就像将两个表相乘,一个表仅包含val_name a,另一个val_name b,然后在val_sequence上联接(很像将索引的python相乘熊猫系列)。

结果将是:

val_sequence val_name val 
0            c        80
1            c        5

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

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

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

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" ;

1 个答案:

答案 0 :(得分:1)

如果如您的样本所示,保证两个流的序列号相同,即,并且仅当a n <退出 n 时/ em>对于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是否提供“前导”序列号,或者对于丢失的序列号,是否应该假设val0,等。