2013-07-13 81 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