C# 在C中如何计算一个SQL查询中的两个条目?

C# 在C中如何计算一个SQL查询中的两个条目?,c#,.net,sql-server,C#,.net,Sql Server,我的ForumPost表中有两列:Id和ThreadId 我想统计特定用户的Id和ThreadId中的所有条目: 代码片段 如果用户可以有不同的ThreadId计数和Id计数,则必须将其拆分为单独的查询 SELECT COUNT(Id) as PostCount, UserName WHERE UserName = '@UserName' GROUP BY Id, UserName SELECT COUNT(ThreadId) as ThreadCount, UserName WHERE U

我的ForumPost表中有两列:Id和ThreadId

我想统计特定用户的Id和ThreadId中的所有条目:

代码片段
如果用户可以有不同的ThreadId计数和Id计数,则必须将其拆分为单独的查询

SELECT COUNT(Id) as PostCount, UserName
WHERE UserName = '@UserName'
GROUP BY Id, UserName


SELECT COUNT(ThreadId) as ThreadCount, UserName
WHERE UserName = '@UserName'
GROUP BY Id, UserName
试一试

您对ID和ThreadID的选择会导致每个ID都返回一条记录,这就是为什么您会得到双重计数。

只要这样做就可以了


从ForumPost中选择COUNT*,其中UserName=@UserName

我在这里猜了一下,但我认为您需要计算用户发表的帖子数量以及用户参与的不同线程的数量:

SELECT 
    (
        SELECT COUNT(Id)
        FROM ForumPost
        WHERE UserName = @UserName
    ) AS PostCount,
    (
        SELECT COUNT(DISTINCT ThreadId)
        FROM ForumPost
        WHERE UserName = @UserName
    ) AS ThreadCount
使用COUNTColumn时,对于列中具有非null值的每一行,该列将计数+1。因此,如果您选择COUNTId作为PostCount,COUNTThreadId作为ThreadCount,您可能会在两个计数中得到相同的数字,因为您分别计算了有多少行具有非空Id和ThreadId

您的目的很可能是要计算用户发布了多少个线程中的多少个帖子,为此您可以使用COUNTDISTINCT列:


但是,不清楚您的实际意图是什么,因为您将此与检索Id和ThreadId混为一谈。你可以表示你想要每个线程中的帖子总数,这个用户在他发布的任何线程中的帖子总数,或者你想要一个帖子列表和一个总数,即两个单独的查询。你需要解释一下。

什么?您能否给出一个包含一些示例数据的工作示例,以及您希望该数据的结果是什么?您需要一个GROUP BY,但不知道列代表什么,很难说更多。您也不需要HasRows,因为GROUP BY查询总是返回至少一行。如果你有错误,你有更大的问题,所以仍然不需要它。对不起,我对那个做了快速剪切/粘贴/删除。应该是:选择COUNTForumPost.Id作为PostCount,COUNTForumPost.threadid作为ForumPost中的ThreadCount,其中UserName=@UserName;如果按同一组列进行分组,则可以组合查询。当你可以做一个查询时,为什么还要做两个查询?
SELECT COUNT(ForumPost.Id)AS PostCount AND (ForumPost.ThreadId)AS ThreadCount" 
                                    // + " COUNT(ForumPost.ThreadId)AS ThreadCount " 
                                     + " FROM ForumPost " 
                                     + " WHERE UserName = @UserName ";
SELECT 
    (
        SELECT COUNT(Id)
        FROM ForumPost
        WHERE UserName = @UserName
    ) AS PostCount,
    (
        SELECT COUNT(DISTINCT ThreadId)
        FROM ForumPost
        WHERE UserName = @UserName
    ) AS ThreadCount
cmd.CommandText = @"
   SELECT  COUNT(ForumPost.Id) AS PostCount 
      , COUNT(DISTINCT ForumPost.ThreadId) AS ThreadCount
   FROM ForumPost 
   WHERE UserName = @UserName ";