2012-01-18 56 views
0

我有幾個wrap語句是retreiving整數值,並在wrap語句中,值正在計算罰款......這是當我想從不同的包裝語句中選擇多個整數值,問題...重複每個val都不相同,有時候我得到的值比它應該大200倍。SQL複製數據 -

下面是代碼結構看起來如何,

SELECT 
     SUM(c.val) 
     ,SUM(t.val) 
     ,SUM(x.val) 
     ,SUM(z.val) 
    FROM  
    (SELECT CASE 
     WHEN ------CRITERIA FOR CODE HERE 
    FROM tableName 
    WHERE ... 
    )c, 

    (SELECT CASE 
    WHEN ------CRITERIA FOR CODE HERE 
    FROM tableName 
    WHERE ... 
    )t, 

    (SELECT CASE 
    WHEN ------CRITERIA FOR CODE HERE 
    FROM tableName 
    WHERE ... 
    )x, 

    (SELECT CASE 
    WHEN ------CRITERIA FOR CODE HERE 
    FROM tableName 
    WHERE ... 
    )z 
+0

它看起來像沒有連接標準的連接。你打算是笛卡兒加入嗎? –

+0

這個問題非常廣泛。你能提供一個更具體的例子,包括你正在使用的數據結構和預期的結果嗎?另外,你所謂的「wrap」語句更適合稱爲「Inline Views」或「Subqueries」。 –

回答

0

當你喜歡的where子句中做你的子查詢,它本質上跨加入他們這不是你想要的。 如果你的「FROM表名WHERE ...」的每個子選擇部分是相同的,做他們在查詢的SELECT部分​​,如下所示:

SELECT 
    (CASE WHEN --criteria...) as c, 
    (CASE WHEN --criteria...) as t, 
    (CASE WHEN --criteria...) as x, 
    (CASE WHEN --criteria...) as z 
FROM tableName 
WHERE ... 
+0

謝謝,這就是我原先想的,只是想將某些wrap語句的值從其他wrap語句中總結出來......謝謝! – user1157084

+0

你可以像這樣獨立地求和每個c,t,x和z:'SUM(CASE WHEN ...)as c' – Chad

0

交叉聯接是你要重複的記錄你的SUM會加起來超過它應該的。這就是爲什麼你獲得比預期更大的價值。

如果您發佈完整查詢,也許我們可以幫助您進行重寫。

0

我認爲你的數據庫正在對你的子查詢的所有結果進行交叉連接。讓我來向你展示一個來自SQLite的例子:

sqlite> create table A(a,b); 
sqlite> create table B(c,d); 
sqlite> insert into B values ('1c','1d'); 
sqlite> insert into B values ('2c','2d'); 
sqlite> insert into A values ('1a','1b'); 
sqlite> insert into A values ('2a','2b'); 
sqlite> select a,b,c,d from A, B; 
1a|1b|1c|1d 
1a|1b|2c|2d 
2a|2b|1c|1d 
2a|2b|2c|2d 
sqlite> select a,b from A; 
1a|1b 
2a|2b 
sqlite> select c,d from B; 
1c|1d 
2c|2d 

正如你所看到的,表A和B都有兩行。但是,從A中選擇*,B會生成4行。這是因爲它爲A和B的行創建了所有可能的組合。因此,當sum()列出現如此大的結果時。

你可以試着這樣做:

SELECT 
    max(first_big_one_column_select), 
    max(second_big_one_column_select), 
    ... 

但我不知道這是否會工作。我認爲很大程度上取決於您使用的數據庫。