Asp.net 选择带有计数、总和和子查询的记录

Asp.net 选择带有计数、总和和子查询的记录,asp.net,sql,tsql,Asp.net,Sql,Tsql,我需要从links表中选择统计信息不为零的所有链接: Table tlink: linkid, linkname, userid Table tuser: userid, username Table tfact: factid, factorder, userid Table tstat: statid, linkid, userid tuser中的用户单击了记录在tfact中的命令 用户可以创建几个记录在tlink中的链接 每次点击任何链接都会

我需要从links表中选择统计信息不为零的所有链接:

Table tlink: 
    linkid, linkname, userid

Table tuser: 
    userid, username

Table tfact: 
    factid, factorder, userid

Table tstat: 
    statid, linkid, userid
tuser中的用户单击了记录在tfact中的命令

用户可以创建几个记录在tlink中的链接

每次点击任何链接都会记录在tstat中

网页应该过滤所有使用有序点击的链接

例如,ABC公司每次订购3次,每次点击100次,总共点击300次

然后,他们创建了几个链接,这些链接全部显示,直到总共使用了300次点击

我尝试了几个查询//子查询,但都没有结果,希望能得到任何帮助。

像这样的问题

SELECT
    l.linkid,
    l.linkname,
    l.userid,
    u.username,
    f.factorder - s.clickCount AS clicksUnused
FROM
    tlink l
    INNER JOIN tuser u ON u.userid = l.userid
    INNER JOIN tfact f ON f.userid = l.userid
    INNER JOIN (
        SELECT
            linkid,
            userid,
            COUNT(*) AS clickCount
        FROM
            tstat
        GROUP BY
            linkid,
            userid
        ) s ON s.linkid = l.linkid AND s.userid = l.userid
@NGLN

很抱歉我没有早点回答,但我已经离开几天了

我想我已经成功了:

选择L.linkid,F.OrderSum-S.clickCount AS ClickSunsUsed FROM tlink AS L Internal JOIN SELECT userid,SUMfactorder AS OrderSum FROM tfact GROUP BY userid AS F ON F.userid=L.userid Internal JOIN SELECT userid,COUNT*AS clickCount FROM tstat GROUP BY userid AS S.userid=L.userid -其中-单击未使用>=1

现在唯一的问题是我无法过滤出clicksUnused大于1的链接

有什么想法吗,谢谢,迈克

更新让这个工作

其中F.OrderSum>S.clickCount


这是正确的方法吗?

到目前为止,您尝试了哪些方法;你能提供同样的吗。另外,请尝试编辑您的问题。我尝试了许多不同的查询,例如选择DISTINCT dbo.stat.linkid、COUNTdbo.stat.statid作为我的_stat,dbo.link.linkid作为dbo.link中的Expr1在dbo.link.linkid=dbo.stat.linkid其中dbo.stat.userid<从dbo.fact中选择SUMfactorder作为我的命令,其中dbo.link.userid=userid GROUP BYdbo.stat.linkid,dbo.link.linkid,但却一无所获!谢谢,但它没有考虑表tfact中的点击次数,表tfact中的点击次数必须高于表中的点击次数统计tstat@Mike好的,换了。但是为什么你要注册那些没有被排序的点击呢?这样做的目的是只选择那些仍然可用的链接,并排除那些已经被排序的点击已经到达的链接。例如,你今天点击100次,下周再点击200次,总共300次,然后你创建了一些链接,可能是3个不同的链接,但是当你点击300次后,你的链接将不再显示。因此,此查询只返回未达到tfact中存储的已订购的总点击数的链接。因此,它必须统计用户在tstat中订购的所有点击数,统计在tstat中完成的所有点击数,然后进行比较,只选择低于订单的链接。@Mike Ok,再次更改,假设FactorOrder是已订购/最大点击次数。但是,如果要按linkid对其进行分组,当然要考虑单击日期历史记录,则需要另一种表设计。