2015-10-22 67 views
0

无法弄清楚如何制定这个公式,然后每年得到答案。总和然后分组?

Select 
((Select Sum(#FinancialView2.CONVERTED_AMOUNT)*-1 
FROM #FinancialView2 
WHERE #FinancialView2."SECTION_NUMBER"=300 
AND #FinancialView2.BU_CODE in ('10','11','W0') 
GROUP BY FinancialYear) 
+ 
(Select Sum(#FinancialView2.CONVERTED_AMOUNT)*-1 
FROM #FinancialView2 
WHERE #FinancialView2."SECTION_NUMBER"=400 
AND #FinancialView2.BU_CODE in ('10','11','W0') 
AND #FinancialView2.DeptCode not in ('403','413'))) 
/
((Select Sum(#FinancialView2.CONVERTED_AMOUNT)*-1 
FROM #FinancialView2 
WHERE #FinancialView2."LINE_NUMBER"=110 
AND #FinancialView2.BU_CODE in ('10','11','W0')) 
+ 
(Select Sum(#FinancialView2.CONVERTED_AMOUNT)*-1 
FROM #FinancialView2 
WHERE #FinancialView2."LINE_NUMBER"=115 
AND #FinancialView2.BU_CODE in ('10','11','W0')) 
+ 
(Select Sum(#FinancialView2.CONVERTED_AMOUNT)*-1 
FROM #FinancialView2 
WHERE #FinancialView2."LINE_NUMBER"=120 
AND #FinancialView2.BU_CODE in ('10','11','W0')) 
+ 
(Select ISNULL(Sum(#FinancialView2.CONVERTED_AMOUNT)*-1,0) 
FROM #FinancialView2 
WHERE #FinancialView2."LINE_NUMBER"=125 
AND #FinancialView2.BU_CODE in ('10','11','W0')))*-1 

我尝试“集团通过”在这里,但它不会显而易见的原因

任何思考工作吗?

+1

很多想法说实话。你能解释一下这个脚本的问题/目标吗?然后粘贴当前的错误信息,最后告诉我们你正在使用哪个RDBMS。 – gustavodidomenico

回答

0

Loks像你需要一些有条件的骨料(仔细检查,如果我正确转换的条件):

Select FinancialYear, 
(
    Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=300 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
+ Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=400 AND #FinancialView2.DeptCode not in ('403','413') 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
) 
/
(
    Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=110 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
+ Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=115 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
+ Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=120 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
+ Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=125 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
) 
WHERE #FinancialView2.BU_CODE in ('10','11','W0') 
GROUP BY FinancialYear 

这可以进一步简化为:

Select FinancialYear, 
(
    Sum(CASE WHEN #FinancialView2."SECTION_NUMBER"=300 
       OR (#FinancialView2."SECTION_NUMBER"=400 AND #FinancialView2.DeptCode not in ('403','413')) 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
) 
/
(
    Sum(CASE WHEN #FinancialView2."SECTION_NUMBER" IN (110, 115, 120, 125) 
      THEN #FinancialView2.CONVERTED_AMOUNT ELSE 0 END)*-1 
) 
WHERE #FinancialView2.BU_CODE in ('10','11','W0') 
GROUP BY FinancialYear 

最后,col*-1是完全一样的作为-col

+0

你是冠军兄弟,真的很出色 – JohnnyUtah