如何将当前位于WHERE
子句AND subMainTable.ID = MainTable.ID
中的联接移动到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 ...
答案 0 :(得分: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)
我没有测试过,但我认为它会起作用。
答案 1 :(得分: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