如何使用SQL创建一个带有总和的表格行

4

我正在尝试创建一个具有分区可能性的表格,我希望一行中所有单元格的总和为1。 例如:

0.1, 0.2, 0.3, 0.3, 0.1  

1
你是在问是否可以创建一个限制条件来强制这个为真吗?还是你在问其他事情?如果是,请问是什么? - Bohemian
2
我认为我们需要更多的信息。你能展示一下表格以及查询结果应该是什么吗? - Roger
@Bohemian 我希望它等于1。 - Ofer
@Rogier 列是我写的,我想创建一个状态,使得每行的总和等于1,如果总和不等于1,则插入失败。 - Ofer
2个回答

8
您可以在表上创建一个约束条件,要求每行都满足某些条件,例如这种情况下,列的总和为1:
create table my_table (
  col1 number,
  col2 number,
  col3 number,
  col4 number,
  constraint assert_sum_is_one check (col1 + col2 + col3 + col4 = 1)
)

任何试图插入或更新不等于1的行都会导致约束违规异常。


4
如果您使用的是11g版本,可以使用Oracle虚拟列:http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php,并结合检查约束来实现。
CREATE TABLE myTable (
  id          NUMBER,
  col1        NUMBER(3),
  col1        NUMBER(3),
  col3        NUMBER(3),
  colsum      NUMBER GENERATED ALWAYS AS (col1 + col2 + col3) VIRTUAL,
  CONSTRAINT pk_mytable PRIMARY KEY (id)
);

然后添加一个约束条件来检查colsum是否总是恰好为1。

编辑:Bohemian的答案更简单、更好。在这种情况下,使用虚拟列的唯一优点是总和始终被持久化/可见,但如果约束条件防止总和不等于1,那么这并不是必需的。出于完整性考虑,我将保留此答案。


任何会计工作都非常有帮助。 - Igor S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接