2014-10-27 59 views
-1
計算選擇數據

我的表是在同一個數據表

itemcode in out sum value datetime  PP 
-------|---|---|-----------|-----------|--------- 
A1234 | 1 | 0 | 100  |04/03/2009 | E01 
A1234 | 0 | 1 | -100  |05/03/2009 | E01  
A1234 | 1 | 0 | 100  |06/03/2009 | E01 
A1234 | 0 | 1 | -100  |07/03/2009 | E01 
A1234 | 1 | 0 | 100  |08/03/2009 | E01 
A1234 | 9 | 0 | 900  |09/03/2009 | S01 
A1234 | 0 | 3 | -300  |10/03/2009 | S01 
A1234 | 8 | 0 | 800  |11/03/2009 | S01 
A1235 | 9 | 0 | 900  |12/03/2009 | E01 
A1235 | 0 | 2 | -200  |13/03/2009 | E01 
A1235 | 0 | 3 | -300  |14/03/2009 | E01 
A1235 | 8 | 0 | 800  |15/03/2009 | S01 

結果將是:

itemcode Remain sum value datetime PP 

---------|--------|-----------|-----------|---- 
A1234 | 1  | 100  |08/03/2009 | E01 
A1234 | 6  | 600  |09/03/2009 | S01 
A1234 | 8  | 800  |11/03/2009 | S01 
A1235 | 4  | 400  |12/03/2009 | E01 
A1235 | 8  | 800  |15/03/2009 | S01 

如何選擇這樣的數據,並通過同一itemcode和PP計算有多少庫存剩餘,組, 列出在不同的庫存日期

+0

您的預期結果沒有任何意義。你在分組什麼?那裏沒有重要的分組。 – AdamMc331 2014-10-27 02:23:01

+0

我不明白爲什麼沒有意義?我需要找出每個庫存日期剩餘的庫存數量。通過相同的產品代碼和相同的pp代碼分組,並且不需要顯示剩餘庫存是否爲0 – 2014-10-27 02:32:52

+0

如果您使用相同的產品代碼和pp代碼進行分組,那麼您的第2和第3行不會合並在一起嗎?此外,哪些日期是「有庫存日期」,爲什麼您使用07/03作爲第一排? – AdamMc331 2014-10-27 02:54:18

回答

1

我會這樣做的方式是使用SUM()函數來總結在列,以及出列,並減去它們以獲得有現貨的價值。完成之後,您可以使用GROUP BY子句對所需的列進行分組。直觀上,它與您所描述的內容非常接近。

您還需要對日期列做些什麼,而且您似乎希望在每個組中都生成最新日期,所以我也選擇了最大日期。

你沒有列出列名在你的問題,所以我這裏發生了肢體:

SELECT itemcode, (SUM(inColumn) - SUM(outColumn)) AS inStock, SUM(value) AS value, MAX(dateColumn) AS latestDate, pp 
FROM myTable 
GROUP BY itemcode, pp; 

這裏是SQL Fiddle

+0

這個概念是錯誤的,如果剩餘庫存超過了庫存日期的最後一個,你只需要找出最後的日期是不正確的。 – 2014-10-27 02:30:34

+0

您在問題中設置的預期結果有點令人困惑。我不確定你在分組。你能解釋結果集中第2行和第3行有什麼不同嗎?他們爲什麼不組合在一起?這是相同的pp和相同的itemcode,所以他們不應該合併? – AdamMc331 2014-10-27 02:33:21

+0

,因爲庫存日期不同,所以它不能成組。 – 2014-10-27 02:37:56

相關問題