2015-02-11 77 views
0

自從我做這份報告已經過了2個星期。我需要今天完成,但仍然無法找到任何解決方案。我知道我的錯誤發生在哪裏(它在我的INNER SELECT沒有GROUP BY ItemCode),但是我無法通過INNER SELECT上的ItemCode對它進行分組,因爲我的OUTER SELECT上有GROUP BY我的INNER SELECT沒有提示正確的輸出

我將有一個錯誤在我的代碼,如果我把GROUP BY內部查詢內部和錯誤是:! 「子查詢返回多個值,這不是當子查詢遵循=,=允許, <,< =,>,> =或當子查詢用作表達

這是我的代碼,它正在運行,但折舊金額高達每月全年所有的值。

DROP PROCEDURE dfsi_sp_FALS2 
GO 
CREATE PROCEDURE dfsi_sp_FALS2 
@filterDate DATE 
AS 


SELECT ODPV.ItemCode, OITM.ItemName, ITM8.APC, ITM7.UsefulLife, SUM(ODPV.OrdDprPost) AS AccumulatedDep, 
(ITM8.APC - SUM(ODPV.OrdDprPost)) AS NBV, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-01-01 00:00:00' AND 
ODPV.ToDate = '2014-01-31 00:00:00' GROUP BY ODPV.ItemCode) AS DateofJanuary, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-02-01 00:00:00' AND 
ODPV.ToDate = '2014-02-28 00:00:00') AS DateofFebruary, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-03-01 00:00:00' AND 
ODPV.ToDate = '2014-03-31 00:00:00') AS DateofMarch, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-04-01 00:00:00' AND 
ODPV.ToDate = '2014-04-30 00:00:00') AS DateofApril, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-05-01 00:00:00' AND 
ODPV.ToDate = '2014-05-31 00:00:00') AS DateofMay, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-06-01 00:00:00' AND 
ODPV.ToDate = '2014-06-30 00:00:00') AS DateofJune, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-07-01 00:00:00' AND 
ODPV.ToDate = '2014-07-31 00:00:00') AS DateofJuly, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-08-01 00:00:00' AND 
ODPV.ToDate = '2014-08-31 00:00:00') AS DateofAugust, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-09-01 00:00:00' AND 
ODPV.ToDate = '2014-09-30 00:00:00') AS DateofSeptember, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-10-01 00:00:00' AND 
ODPV.ToDate = '2014-10-31 00:00:00') AS DateofOctober, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-11-01 00:00:00' AND 
ODPV.ToDate = '2014-11-30 00:00:00') AS DateofNovember, 
(SELECT SUM(ODPV.OrdDprPost) FROM ODPV WHERE ODPV.FromDate = '2014-12-01 00:00:00' AND 
ODPV.ToDate = '2014-12-31 00:00:00') AS DateofDecember 


FROM ODPV 
INNER JOIN OITM ON OITM.ItemCode = ODPV.ItemCode  
INNER JOIN ITM7 ON ITM7.ItemCode = ODPV.ItemCode 
INNER JOIN ITM8 ON ITM8.ItemCode = ODPV.ItemCode 

WHERE 
ODPV.DprArea = 'Main Area' AND ODPV.PeriodCat = @filterDate 
GROUP BY ODPV.ItemCode, OITM.ItemName, ITM8.APC, ITM7.UsefulLife 

GO 

EXEC dfsi_sp_FALS2 '2014'; 

每月折舊列將re SULT到這一點,如果我運行上面的查詢:

Date of September: 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 
432803.387566 

此代碼是我需要什麼,但我不能做我的查詢,因爲這個代碼應該是在內部的選擇:

SELECT SUM(ODPV.OrdDprPost) AS DateofSeptember FROM ODPV WHERE ODPV.FromDate = '2014-10-01 00:00:00' 
AND ODPV.ToDate = '2014-10-31 00:00:00' GROUP BY ODPV.ItemCode; 

上面的代碼將導致這個(我想要的結果(這是每個ItemCode上月折舊)):

10200.000000 
0.000000 
0.000000 
2921.000000 
498.000000 
1030.000000 
0.000000 
0.000000 
427.000000 
327.000000 
0.000000 
291.000000 
30.000000 
13.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
1899.000000 
0.000000 
1439.000000 
28.000000 
190.000000 
18.000000 
516.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
121.000000 
121.000000 
354.000000 
382.000000 
32.000000 
588.000000 
127.000000 
88.000000 
88.000000 
0.000000 
0.000000 
388.000000 
340.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
79.000000 
457.000000 
457.000000 
167.000000 
181.000000 
213.000000 
107.000000 
82.000000 
81.000000 
135.000000 
0.000000 
217.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
35.000000 
35.000000 
35.000000 
43.000000 
18.000000 
18.000000 
2.000000 
50.000000 
174.000000 
53.000000 
29.000000 
26.000000 
48.000000 
333.000000 
27.000000 
662.000000 
1660.000000 
1109.000000 
154.000000 
112.000000 
218.000000 
423.000000 
85.000000 
265.000000 
221.000000 
134.000000 
1349.000000 
21.000000 
34.000000 
54.000000 
0.000000 
121.000000 
128.000000 
83.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
616.000000 
614.000000 
1666.000000 
0.000000 
0.000000 
0.000000 
469.000000 
1120.000000 
9.000000 
20.000000 
99.000000 
99.000000 
152.000000 
18.000000 
656.000000 
108.000000 
84.000000 
84.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
1188.000000 
59.000000 
0.000000 
90.000000 
90.000000 
86.000000 
86.000000 
29.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
0.000000 
934.000000 
934.000000 
164.000000 
0.000000 
0.000000 
0.000000 
0.000000 
104.000000 
338.000000 
338.000000 
338.000000 
284.000000 
254.000000 
35.000000 
45.000000 
45.000000 
45.000000 
168.000000 
162.000000 
162.000000 
273.000000 
275.000000 
32.000000 
609.000000 
72.000000 
72.000000 
0.000000 
0.000000 
51.000000 

我知道爲什麼它總結了,但我不能GROUP BY我的內部查詢,因爲它會有一個錯誤。

我需要你的幫助傢伙pleaseeee。非常感謝你。我會很感激你的建議。

+0

可能是您的內部查詢返回多個值 – 2015-02-11 05:14:40

+0

錯誤:「子查詢返回的值不止1個,當子查詢跟隨=,!=,<, <= , >,> =或子查詢用作表達。」我會在我的內部查詢中放置一個組時提示。我需要通過內部查詢進行分組,以便獲得正確的結果或者有其他選擇? – 2015-02-11 05:24:10

回答

0

不知道究竟是什麼問題。如果你有簡化的要求,如簡單的例子,這將是容易的...

根據我的理解,你試圖爲每個項目代碼獲得每月的總和。如果是,則嘗試下面給出的查詢。

SELECT Od.ItemCode, OITM.ItemName, ITM8.APC, ITM7.UsefulLife, SUM(Od.OrdDprPost) AS AccumulatedDep, 
(ITM8.APC - SUM(Od.OrdDprPost)) AS NBV, 
(SELECT SUM(OdJ.OrdDprPost) FROM ODPV OdJ WHERE OdJ.FromDate = '2014-01-01 00:00:00' AND OdJ.ToDate = '2014-01-31 00:00:00' AND OdJ.ItemCode = Od.ItemCode) AS DateofJanuary, 
(SELECT SUM(OdF.OrdDprPost) FROM ODPV OdF WHERE OdF.FromDate = '2014-02-01 00:00:00' AND OdF.ToDate = '2014-02-28 00:00:00' AND OdF.ItemCode = Od.ItemCode) AS DateofFebruary  

FROM ODPV Od 
INNER JOIN OITM ON OITM.ItemCode = Od.ItemCode  
INNER JOIN ITM7 ON ITM7.ItemCode = Od.ItemCode 
INNER JOIN ITM8 ON ITM8.ItemCode = Od.ItemCode 

WHERE 
Od.DprArea = 'Main Area' AND Od.PeriodCat = @filterDate 
GROUP BY Od.ItemCode, OITM.ItemName, ITM8.APC, ITM7.UsefulLife 

我只給了Jan和FEB。只需複製每個月的內部查詢並更改子查詢中的日期和別名即可。

+0

首先非常感謝您的鼎力幫助我的朋友。 (SELECT SUM(OdJ.OrdDprPost)FROM ODPV OdJ WHERE OdJ.FromDate ='2014-01-01 00:00:00'AND OdJ.ToDate ='2014-01-31 00:00:00'Where OdJ。 ItemCode = Od.ItemCode)AS Dateof January, 有兩個(2)WHERE子句。我有一個錯誤。你的語法正確嗎?我希望你的查詢能夠運行。因爲我現在需要完成這個。再次非常感謝你的回答。 – 2015-02-11 05:35:00

+0

我編輯它。第二個地方應該用'AND'代替。 – Shamseer 2015-02-11 05:54:27

+0

我發現它是AND。嘿,我的朋友,非常感謝!你救了我的一天! :) 祝你有美好的一天。 – 2015-02-11 05:56:08

0

只是一個建議.. 嘗試在Proc中創建一個臨時表並轉儲其中的所有內部選擇查詢輸出,並將臨時表連接到其他表以獲得整體輸出。

+0

嘿,我的朋友。謝謝你的建議。 我一直在想這個。但我不知道如何開始做。但是我很樂意學習,所以下次我會這樣做。這份報告需要緊急,所以我更喜歡第一個解決方案。 非常感謝您的兄弟!這也有助於我。 :) – 2015-02-11 05:59:32