2012-08-15 26 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

相關問題