2013-07-13 174 views
0

如何將當前在WHERE子句AND subMainTable.ID = MainTable.ID中的聯接移動到FROM子句中。在WHERE子句中使用別名FROM FROM子句中的子查詢加入

由於存在別名的方式,我似乎無法將其移動到那裏。

這是一個工作查詢,我已經重命名並刪除了與問題無關的部分。

SELECT 
     ID 
    ,DETAILS 
    ,ENTRYDATE 
    ,ISNULL(LastBalance, 0) + (
      SELECT SUM(VAL) 
      FROM tempData subMainTable 
       LEFT OUTER JOIN FinanceTable f ON subMainTable.ID = f.accId 
               AND subMainTable.TRANS_ID = f.txnID 
      WHERE subMainTable.TRANS_ID <= MainTable.TRANS_ID 
        AND subMainTable.ID = MainTable.ID 
        AND f.txnID IS NULL 
     ) AS Balance 
FROM 
    (SELECT MainTable.* 
     FROM tempData MainTable LEFT JOIN FinanceTable FinTable ON 
        (MainTable.ID = FinTable.accId 
        AND MainTable.TRANS_ID = FinTable.txnID) 
     WHERE (FinTable.accId IS NULL AND FinTable.txnID IS NULL) 
       ) AS MainTable ... 

回答

1

試着這麼做:

SELECT MainTable.ID,MainTable.DETAILS,MainTable.ENTRYDATE,ISNULL(MainTable.LastBalance, 0) + (SUM(subMainTable.VAL)) AS Balance 
FROM  
(
    SELECT MainTable.* 
    FROM tempData MainTable 
    LEFT JOIN FinanceTable FinTable ON (MainTable.ID = FinTable.accId 
    AND MainTable.TRANS_ID = FinTable.txnID 
    ) 
    WHERE (FinTable.accId IS NULL AND FinTable.txnID IS NULL ) 
) AS MainTable 
left outer join 
(
    SELECT TRANS_ID ,ID , SUM(VAL) 
    FROM 
    tempData subMainTable LEFT OUTER JOIN FinanceTable f 
    ON 
    subMainTable.ID = f.accId AND 
    subMainTable.TRANS_ID = f.txnID 
    WHERE 
    f.txnID IS NULL 
) as subMainTable on subMainTable.TRANS_ID <= MainTable.TRANS_ID AND subMainTable.ID = MainTable.ID 
group by MainTable.ID,MainTable.DETAILS,MainTable.ENTRYDATE,ISNULL(MainTable.LastBalance, 0) 

餘did't測試,但我認爲它會工作。

+0

一個嘗試沒有它不會工作,SUM(VAL)不具有一組 – Paparazzi

1

這是它的一部分

SELECT ID 
     ,DETAILS 
     ,ENTRYDATE 
     ,ISNULL(LastBalance, 0) + (
       SELECT SUM(VAL) 
        FROM tempData subMainTable 
        LEFT OUTER JOIN FinanceTable f 
        ON subMainTable.ID = f.accId 
        AND subMainTable.TRANS_ID = f.txnID 
        AND subMainTable.TRANS_ID <= MainTable.TRANS_ID 
        AND subMainTable.ID = MainTable.ID 
       WHERE f.txnID IS NULL 
       ) AS Balance 
    FROM tempData MainTable 
    LEFT JOIN FinanceTable FinTable 
     ON MainTable.ID = FinTable.accId 
    AND MainTable.TRANS_ID = FinTable.txnID 
    WHERE FinTable.accId IS NULL 
    AND FinTable.txnID IS NULL 

這是在所有

SELECT ID 
     ,DETAILS 
     ,ENTRYDATE 
     ,ISNULL(LastBalance, 0) 
     ,SUM(VAL) AS DeltaBalance 
    FROM tempData MainTable 
    LEFT JOIN FinanceTable FinTable 
     ON MainTable.ID = FinTable.accId 
    AND MainTable.TRANS_ID = FinTable.txnID 
    LEFT JOIN subMainTable 
     ON subMainTable.ID = MainTable.ID 
    AND subMainTable.TRANS_ID <= MainTable.TRANS_ID 
    LEFT JOIN FinanceTable f 
     ON subMainTable.ID = f.accId 
    AND subMainTable.TRANS_ID = f.txnID 
    WHERE FinTable.accId IS NULL 
    AND FinTable.txnID IS NULL 
    AND f.txnID IS NULL 
    GROUP BY ID, DETAILS,ENTRYDATE,LastBalance