2013-02-27 52 views
0

確定後獲得幾個重複的行,所以我有4個表:如何避免加盟

credits, playlog, sessionlog, user 

credits有列userid加入與user
playlog已將sessionlogid加入sessionlog
sessionlog已將userid加入user

所以當我加入任何與sessionlog,我必須做的事情來獲取用戶,行會列出多次。

我想我知道爲什麼發生這種情況,我只是不知道如何防止它。

因此,每次玩家玩關卡時,都會創建一個playlog(並且每個playlog包含sessionlogid)。

當我將所有東西加在一起時,每個玩家都會像他一樣經常上市,儘管我只希望他被列出一次。

當我查看特定玩家的信用時,例如,我得到2行信息,具體取決於他消費的頻率。

但只要我參加與sessionlog,這2行得到乘以似乎與playlog S如何許多屬於那個sessionlog - 如果他出場5級,這2付款行得到乘以5,輸出爲10行2付款。 這給了我很大的問題來計算每級支付。

如何查詢每個sessionlog只需要最新的playlog加上附加的約束條件?

+1

你的問題還不夠清楚。你想查詢: 1.信貸(日誌)並顯示所有的信貸支出歷史? - 或 - 2.用戶並顯示總信用? – 2013-02-27 16:53:52

+0

因此我想要列出所有級別的列表(列表中記錄了哪個級別的播放列表日誌)以及列出在每個級別上花費了多少功勞的列 – msa 2013-02-27 17:06:08

+1

您仍然無法提供足夠的信息。你應該考慮爲每個表格和你想要的輸出樣本提供一些樣本數據。 – 2013-02-27 17:09:44

回答

0

您沒有提供足夠的信息。這裏有一個嘗試:這將給你一個用戶名單和每個玩家花費多少錢:

SELECT  dbo.Users.userID 
      , dbo.Users.userName 
      , SUM(dbo.Credit.CreditChange) AS NetCreditSpent 
      , COUNT(dbo.PlayLog.sessionlogid) AS PlayCount 
      , 1.0 * SUM(dbo.Credit.CreditChange)/COUNT(dbo.PlayLog.sessionlogid) AS CreditSpentPerPlay 
FROM  dbo.Credit 
       RIGHT OUTER JOIN dbo.PlayLog 
       INNER JOIN dbo.SessionLog 
        ON dbo.PlayLog.sessionlogid = dbo.SessionLog.sessionlogid 
       RIGHT OUTER JOIN dbo.Users 
        ON dbo.SessionLog.userid = dbo.Users.userID 
        ON dbo.Credit.userID = dbo.Users.userID 
GROUP BY dbo.Users.userID, dbo.Users.userName