Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在表中创建总和为1 sql的行_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

如何在表中创建总和为1 sql的行

如何在表中创建总和为1 sql的行,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我正在尝试创建具有除法可能性的表,我希望一行中所有单元格的总和为1。 例如: 0.1, 0.2, 0.3, 0.3, 0.1 如果您使用的是11g,则可以使用Oracle虚拟列: 与检查约束结合使用 CREATE TABLE myTable ( id NUMBER, col1 NUMBER(3), col1 NUMBER(3), col3 NUMBER(3), colsum NUMBER GENER

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

0.1, 0.2, 0.3, 0.3, 0.1  

如果您使用的是11g,则可以使用Oracle虚拟列:

与检查约束结合使用

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


编辑:波希米亚人的答案更简单更好。在这种情况下,使用虚拟列的唯一优点是总和始终保持/可见,但如果约束阻止总和为1以外的任何值,则不需要这样做。为了完成,我将保留此答案。

您可以在表上创建一个约束,要求每行满足某些条件,在这种情况下,列总数为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的尝试都将导致约束冲突异常。

您是否询问是否可以创建强制为真的约束?还是你在问别的事情?如果是这样,什么?我想我们需要更多的信息。你能告诉我如何使用这个表以及查询结果应该是什么吗?@Bohemian我希望它等于1@Rogier这些列就是我写的,我想创建一个状态,即每行的总和等于1,如果总和不等于1,那么插入失败对任何会计工作都非常有用。