2012-08-15 23 views
4

我试图创建一个分裂的可能性表,我想在一个行中的所有单元格的总和将是1 例如:如何在表中创建行1个SQL的总和

0.1, 0.2, 0.3, 0.3, 0.1 
+1

你问是否可以创建一个约束,强制这是真实的?或者你在问别的东西吗?如果是这样,什么? – Bohemian 2012-08-15 07:29:08

+2

我认为我们需要更多信息。你可以使用表格和查询的结果应该是什么? – Roger 2012-08-15 07:29:27

+0

@波希米亚我希望它等于1 – Ofer 2012-08-15 07:30:13

回答

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

编辑:波希米亚的答案是简单,更好。在这种情况下,虚拟列的唯一优点是总和总是持久/可见,但是如果约束阻止总和不是1以外的任何值,那么这不是必需的。为了完成,我会留下这个答案。

+0

非常有助于任何会计师的东西。 – 2013-04-22 13:11:39

相关问题