2014-03-26 40 views
0

我正在嘗試查找每個成員擁有的積分數量。兩個相關的表格是LESSONPOINT。我必須首先總結購買的積分,POINT.Point,然後減去使用的積分,LESSON.LessonPoint。這兩項操作自然必須使用GROUP BY MemberIdSQL:從兩個不同的表中扣除SUM

我最初嘗試了以下查詢,但是它正在計算LESSON表中每個記錄的SUM。例如,如果購買的積分總和等於10,並且每次拿到五個1點的教訓,則結果將達到45.總和10減1點5次((10-1)* 5 = 45)。然而,追求的結果是5(購買的10分減去使用的5分)。 PIA =入帳。

SELECT P1.MemberId,SUM(P1.Point)-sum(L1.LessonPoint)AS PIA
從點P1 LEFT JOIN課L1 ON P1.MemberId = L1.MemberID GROUP BY P1.MemberId
ORDER BY P1.MemberId DESC

我只想計算每個SUM一次,所以我需要某種子查詢。然後我嘗試了下面的內容,但是我收到一條錯誤消息,說它不能識別SLP。 SLP =課程點數總和。

SELECT P1.MemberId,SUM(P1.Point)-SLP AS PIA從點P1 FULL JOIN 課L1 ON P1.MemberId = L1.MemberId GROUP BY P1.MemberId WHERE P1.MemberId IN(SELECT SUM(L1.LessonPoint)AS SLP從第一課L1 GROUP BY L1.MemberId)

然後我試圖打破的問題。但是,以下給出的結果與第一個查詢類似,因爲POINT.Point的和是LESSON.LessonPoint中對應於MemberId的每個記錄計算的。

SELECT P1.MemberId,SUM(P1.Point),SUM(L1.LessonPoint)從點P1 FULL JOIN課L1 ON L1.MemberId = P1.MemberId GROUP BY L1.MemberId, P1.MemberId

我希望這個問題明確闡述。我已經達到了我的知識和能力的極限,請幫助。

回答

0
SELECT P1.MemberId, P1.p1sum -L1.l1sum as res_sum AS PIA 
FROM (SELECT P1.MemberId, SUM(P1.Point) as p1sum FROM POINT P1 GROUP BY P1.MemberId) P1 
JOIN (SELECT L1.MemberId, SUM(L1.LessonPoint) as l1sum FROM LESSON L1 GROUP BY L1.MemberId) L1 
    ON P1.MemberId= L1.MemberID 
ORDER BY P1.MemberId DESC 

只需計算子查詢的款項,並加入兩個子查詢

+0

你真棒! – Jeimuzu

+1

爲了有類似問題的未來觀衆的利益,我調整了這個答案來解決NULL值。這裏是新的第一行:'SELECT ISNULL(L1.MemberId,P1.MemberId)AS MemberId,ISNULL(P1.p1sum,0) - ISNULL(L1.l1sum,0)as res_sum' – Jeimuzu

0
;WITH CTE (MemberId,p1sum,l1sum) AS 
(
SELECT P1.MemberId, SUM(P1.Point),SUM(L1.LessonPoint),L1.MemberId as p1sum FROM POINT P1 
INNER JOIN LESSON L1 
ON P1.MemberId= L1.MemberID 
GROUP BY P1.MemberId 
ORDER BY MemberId DESC 
) 
select MemberId, p1sum - l1sum as res_sum FROm CTE