我有一個postgresql表,其中包含倉庫間不同項目(模型)的移動。使用SQL進行分組時計算行之間的差異
例如,以下記錄意味着,5個單位的模型1的已發送形式倉庫1至2:
source target model units
------ ------ ----- -----
1 2 1 5
我試圖建立一個SQL查詢來獲得發送和接收單元之間的差,按模型分組。再一個例子:
source target model units
------ ------ ----- -----
1 2 1 5 -- 5 sent from 1 to 2
1 2 2 1
2 1 1 2 -- 2 sent from 2 to 1
2 1 1 1 -- 1 more sent from 2 to 1
結果應該是:
source target model diff
------ ------ ----- ----
1 2 1 2 -- 5 sent minus 3 received
1 2 2 1
我不知道這是否可能與一個SQL查詢。
下面是表創建腳本和一些數據,以防萬一有人想嘗試一下:
CREATE TEMP TABLE movements
(
source INTEGER,
target INTEGER,
model INTEGER,
units INTEGER
);
insert into movements values (1,2,1,5);
insert into movements values (1,2,2,1);
insert into movements values (2,1,1,2);
insert into movements values (2,1,1,1);
偉大的答案!非常清楚! – msemelman 2010-05-08 19:14:41
謝謝,讓我試試看。你的查詢與@Martin Smith提供的查詢相比,如何避免使用「UNION ALL」(使用一些CASE子句)? – 2010-05-08 19:47:40
@Guido:他的答案只掃描一次,我的掃描兩次。你有多少行?性能是一個問題嗎?我會聲稱我的建議更清楚/可讀,但那是我自己的觀點,並且是主觀的。 – 2010-05-08 19:54:35