0

好的,所以我有 4 张桌子:

credits, playlog, sessionlog, user

creditsuserid有要加入的列user
playlog必须sessionlogid加入sessionlog
sessionlog必须userid加入user

因此,当我加入任何东西时sessionlog,我必须这样做才能获得用户,行将被多次列出。

我想我知道为什么会发生这种情况,我只是不知道如何防止它。

所以每次玩家玩一个关卡时,都会创建一个playlog(并且每个都playlog包含sessionlogid)。

当我将所有内容结合在一起时,每个玩家都会被列出playlog,尽管我只希望他被列出一次。

例如,当我查看特定玩家的积分时,我会得到 2 行,具体取决于他花费积分的频率。

但是,一旦我加入sessionlog,这 2 行就会相乘,似乎有多少playlogs 属于那个sessionlog- 如果他玩了 5 个级别,这 2 个付款行乘以 5,输出为 10 行,用于 2 次付款。这给我计算每个级别的付款带来了巨大的问题。

如何进行playlog仅从每个sessionlog附加约束中获取最新的查询?

4

1 回答 1

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
于 2013-02-27T17:12:05.380 回答