2016-09-22 130 views
-1

我試圖總結一個子查詢,但不知道如何重寫此:SQL總結一個子查詢

FORMAT(
SUM(
    CASE WHEN SOH.LASDLVNUM_0 <> '' 
      AND SOH.LASINVNUM_0 <> '' 
      AND MONTH(SOH.SHIDAT_0) = MONTH(GETDATE()) 
     THEN 
      (Select (SID.NETPRI_0) 
      from x3v6.CICPROD.SINVOICED SID 
      where SID.NUM_0 = SOH.LASINVNUM_0 
       and SID.ITMREF_0 = SOQ.ITMREF_0 
       and SID.STOFCY_0 = SOQ.STOFCY_0) 
      * SOQ.INVQTY_0 * SOH.CHGRAT_0 
     ELSE 0.00 END), 
     '##,##0.00') as 'Invoiced (MTD)', 

不得到錯誤消息「不能對包含聚合的表達式執行聚合函數或者一個子查詢。「

+1

哪些DBMS您使用的是什麼?這是非標準的語法。 –

+0

你不能在case語句中放置子查詢。顯示整個SQL查詢,我們可以修復它。 –

+0

@CharlesBretana至少在sql-server中,你絕對可以把一個子查詢放入一個case表達式中,我只是測試了一下以確保。不是我一定會推薦它,雖然 – Matt

回答

0

我很好奇,因爲我從來沒有試過SUM子查詢。我不會建議它,但我儘量避免每行應用的子查詢(例如列定義)。無論如何,你可以弄清楚如何與我們的連接,你可以將你的情況下表達於外APPLY和一些基本上可以讓你聚集的子查詢.....

DECLARE @Table AS TABLE (Id INT IDENTITY(1,1), Criteria INT, Criteria2 INT) 
DECLARE @OtherTable AS TABLE (TID INT) 
INSERT INTO @Table VALUES (1,1),(2,2),(3,3),(4,4) 
INSERT INTO @OtherTable VALUES (1),(1),(2),(2),(3),(3),(4),(4) 

SELECT 
    t.Id 
    ,SUM(COALESCE(oa.Value,0)) 
FROM 
    @Table t 
    OUTER APPLY (SELECT 
       TID as Value 
      FROM 
       @OtherTable ot 
      WHERE 
       ot.TID = t.Id 
       AND t.Criteria % 2 = 0 
       AND t.Criteria2 % 2 = 0) oa 
GROUP BY 
    t.Id 

注意當您使用此解決方法的訣竅是WHEN條件被添加在你的WHERE外的子查詢的條件適用

而且我假定SQL-SERVER,由於您使用的格式()