2011-08-22 98 views
1

我有下面的代碼,每次都有1到3個結果。sql-不能在包含聚合或子查詢的表達式上使用SUM'

但是,我希望有(最多)三個結果的總價值,而不是讓他們列出。

我不能簡單地包裹在select sum()整個編碼沒有得到上面的錯誤

任何幫助greatfully appreicated

-

select 
case when sum(w.Value) > 3*sum(isnull (m.FFT1*m.FFL3V,0) 
         + isnull (m.FFT2*m.FFL3HCV,0) 
         + isnull (m.FFT3*m.FFFinanceSettleV,0) 
         + isnull (m.FFT4*m.FFFinanceSettleHCV,0) 
         + isnull (m.FFT5*m.FFL4V,0) 
         + isnull (m.FFT6*m.FFL4HCV,0)) 
         /count(w.ptmatter) 

    then CAST (SUM(w.Value) AS NUMERIC(38,2)) 

else (
     select sum (isnull (m.FFT1*m.FFL3V,0) 
       + isnull (m.FFT2*m.FFL3HCV,0) 
       + isnull (m.FFT3*m.FFFinanceSettleV,0) 
       + isnull (m.FFT4*m.FFFinanceSettleHCV,0) 
       + isnull (m.FFT5*m.FFL4V,0) 
       + isnull (m.FFT6*m.FFL4HCV,0)) 
       /count(w.ptmatter)) 
end 

from dbo.workinprogress as w 
full join dbo.matterdatadef as m 
on (w.ptmatter = m.ptmatter) 
where (w.time <> 0) 
and (w.ptclient= 
       (select top 1 ptclient from workinprogress 
             where ptmatter=$matter$)) 
             and (m.lsccert = 
                 (select lsccert 
                 from matterdatadef 
                 where ptmatter=$matter$) 
                 or (m.ptmatter=$matter$)) 
group by m.ptmatter 
+0

請編輯您的代碼以包含換行符,以便我們不必滾動6個屏幕以全部閱讀。 – JNK

+0

@JNK希望讓事情變得更容易 –

+0

好多了,謝謝 – JNK

回答

3

約在子查詢包裹整個事情是什麼?

SELECT SUM(v) FROM (
    select case when sum(w.Value) > 
     3*sum (
      isnull (m.FFT1*m.FFL3V,0) + 
      isnull (m.FFT2*m.FFL3HCV,0) + 
      isnull (m.FFT3*m.FFFinanceSettleV,0) + 
      isnull (m.FFT4*m.FFFinanceSettleHCV,0) + 
      isnull (m.FFT5*m.FFL4V,0) + 
      isnull (m.FFT6*m.FFL4HCV,0) 
     )/count(w.ptmatter) 

    then CAST (SUM(w.Value) AS NUMERIC(38,2)) 
    else (
     select sum (
      isnull (m.FFT1*m.FFL3V,0) + 
      isnull (m.FFT2*m.FFL3HCV,0) + 
      isnull (m.FFT3*m.FFFinanceSettleV,0) + 
      isnull (m.FFT4*m.FFFinanceSettleHCV,0) + 
      isnull (m.FFT5*m.FFL4V,0) + 
      isnull (m.FFT6*m.FFL4HCV,0) 
     )/count(w.ptmatter)) 
    end AS v 

    from dbo.workinprogress as w 
    full join dbo.matterdatadef as m 
    on (w.ptmatter = m.ptmatter) 

    where (w.time <> 0) 
    and (w.ptclient = (select top 1 ptclient from workinprogress where ptmatter=$matter$)) 
    and (m.lsccert = (select lsccert from matterdatadef where ptmatter=$matter$) 
    or (m.ptmatter=$matter$)) 

    group by m.ptmatter 
) as subQ 
+0

歡呼的建議,作品一種享受。請你給我一個任何好的教程的鏈接,以便我可以更好地瞭解這是如何工作的,爲什麼 –

相關問題