2012-02-10 50 views
0

我有這樣的[MainTable]一個SQLite表:SQL合計

Date  | Machine | Product | Scrap 
--------------------------------------- 
2012-02-06 | M1  | P1  | 100 
2012-02-06 | M2  | P1  | 110 
2012-02-06 | M2  | P2  | 200 
2012-02-07 | M3  | P3  | 300 

,我希望得到一個查詢,使得這樣的輸出:

Type   | Total   | Scrap 
------------------------------------ 
Machine  | M1   | 100 
Machine  | M2   | 310 
Machine  | M3   | 300 
Product  | P1   | 210 
Product  | P2   | 200 
Product  | P3   | 300 
Date   | 2012-02-06 | 410 
Date   | 2012-02-07 | 300 
Date-Machine | 2012-02-06 M2 | 310 

我問題是,如果我使用UNION ALL來獲取總數,查詢會多次查找[MainTable]。 我想在一次查詢中計算所有總數,以提高使用SQLite查詢而不是java代碼的速度。

我只需要在SQLite中,而不是在另一個引擎上。

回答

0

與類型,總碎料列創建一個新表,然後插入你需要單獨的SQL語句這樣的數據:

步驟一:創建一個newtable的這些列:(類型,總,廢)

步驟二:運行這些語句:

INSERT INTO newTable 
SELECT "machine" as type, machine, sum(scrap) 
from yourFirstTable; 

INSERT INTO newTable 
SELECT "product" as type, product, sum(scrap) 
from yourFirstTable; 

,或者如果你需要這些都在一個查詢中,你可以做這樣的事情:

SELECT "machine" as type, machine, sum(scrap) 
from yourFirstTable 
UNION 
SELECT "product" as type, product, sum(scrap) 
from yourFirstTable 

等等

您還可以參加多次到同一個表,並得到相同的結果是這樣的:

SELECT TYPE, ITEM, sum(scrap) as sumTot 
FROM (SELECT "machine" as type, machine as item, scrap from yourFirstTable) as A, 
     (SELECT "machine" as type, product as item, scrap) as B 
GROUP BY TYPE, ITEM 
+0

感謝您的答覆,但在你的例子可以查找到[yourFirstTable]很多的時代。我的問題是,如果只有一個「FROM yourFirstTable」的查詢是否有可能性。在你的例子中,你查找了4次表格。 (編輯) – leinho 2012-02-11 02:41:22

+0

我增加了一些更多的答案。不知道這是否會做你所需要的,但它是另一種沒有UNION的方式。 – jroyce 2012-02-14 06:35:16