0

我有一个 tblData 和一个 tblUser。

我只想显示用户可以进行的交易。

交易由 DisplayNum 链接,如果 DisplayNum 中的交易之一与 tblUser 中的 TransType 不匹配,则用户不能在该 DisplayNum 中采用任何 TransType。

在此处输入图像描述

4

2 回答 2

1

闲聊后整理的最终版本:

SELECT DISTINCT q2.Id, q3.SubQ, q1.DisplayNum, q1.TransType, q1.TotalTransTime, q1.UserId 
FROM (
    SELECT D.DisplayNum, HighestTransTime.TransType, SUM(D.TransTime) AS TotalTransTime, U.UserId 
    FROM tblData D
    INNER JOIN tblUser U ON D.TransType=U.TransType
    INNER JOIN 
        (
        SELECT DISTINCT innerQuery.DisplayNum, TransType 
        FROM tblData 
        INNER JOIN 
            (
            SELECT DisplayNum, MAX(TransTime) AS TransTime FROM tblData GROUP BY DisplayNum
            ) innerQuery ON tblData.DisplayNum = innerQuery.DisplayNum AND tblData.TransTime = innerQuery.TransTime
        ) HighestTransTime ON D.DisplayNum=HighestTransTime.DisplayNum 
    WHERE U.UserId = 10 
    AND D.TransType IN (SELECT TransType FROM tblUser WHERE tblUser.UserId = U.UserId)
    AND D.DisplayNum NOT IN (SELECT DisplayNum FROM tblData WHERE TransType NOT IN (SELECT TransType FROM tblUser WHERE tblUser.UserId = U.UserId))
    GROUP BY D.DisplayNum, HighestTransTime.TransType, U.UserId
    ) q1
INNER JOIN (SELECT DisplayNum, MAX(ID) AS ID FROM tblData GROUP BY DisplayNum) q2 ON q1.DisplayNum = q2.DisplayNum
INNER JOIN (SELECT SubQ, ID FROM tblData) q3 ON q2.ID=q3.ID
ORDER BY q2.ID
于 2013-07-22T12:45:42.423 回答
0

据我所知,您可以在TransType列上使用简单的连接。

SELECT *
FROM dbo.tblData INNER JOIN dbo.tblUser ON 
dbo.tblData .TransType = dbo.tblUser .TransType 
于 2013-07-22T13:42:17.190 回答