我有兩個問題。 First:
我想將兩個查詢合併爲一個放入存儲過程進行報告製作。他們是SQL在組合兩個查詢後得到不同結果
查詢1
SELECT T0.Name AS Period, SUM(ISNULL(T2.LineTotal, 0)) AS CurrentDebtors, MAX(T1.DocRate) AS ExchangeRate,
SUM(CASE WHEN DATEDIFF(day, T1.DocDate, T1.DocDueDate) > 30
THEN T2.LineTotal END) AS NonCurrentDebtors
FROM OFPR T0 LEFT OUTER JOIN OINV T1 ON T0.AbsEntry = T1.FinncPriod
INNER JOIN INV1 T2 ON T1.DocEntry = T2.DocEntry WHERE YEAR(T1.DocDate) = @Year
GROUP BY T0.Name
ORDER BY T0.Name
查詢2
SELECT T0.Name AS Period, SUM(T1.DocTotal) AS TurnoverMonth
FROM dbo.OFPR T0 LEFT OUTER JOIN dbo.ORCT T1 ON T0.AbsEntry = T1.FinncPriod
WHERE YEAR(T1.DocDate) = @Year
GROUP BY T0.Name
ORDER BY T0.Name
我讓他們組合成這樣:
SELECT T0.Name AS Period, SUM(ISNULL(T2.LineTotal, 0)) AS CurrentDebtors, MAX(T1.DocRate) AS ExchangeRate,
SUM(CASE WHEN DATEDIFF(day, T1.DocDate, T1.DocDueDate) > 30
THEN T2.LineTotal END) AS NonCurrentDebtors , SUM(ISNULL(T3.DocTotal, 0)) AS TurnoverMonth
FROM OFPR T0 LEFT OUTER JOIN OINV T1 ON T0.AbsEntry = T1.FinncPriod
INNER JOIN INV1 T2 ON T1.DocEntry = T2.DocEntry
JOIN ORCT T3 ON T0.AbsEntry = T3.FinncPriod
WHERE YEAR(T1.DocDate) = @Year
GROUP BY T0.Name
ORDER BY T0.Name
的問題是,儘管分開2個查詢結果上面的內容是正確的,上面的組合查詢返回了數量非常大的錯誤值。我如何正確地結合這兩者? Second:
如果存在非常大的數據,查詢1還需要一些時間才能執行,以何種方式來提高其效率?使用Microsoft SQL Server 2008
感謝NikolaMarkovinović。這對我有很大的幫助。 – 2012-08-17 11:50:54
@KinyanjuiKamau不客氣:-) – 2012-08-17 11:51:52