Comment puis-je countr deux inputs dans une requête SQL en C #?

J'ai deux colonnes dans mon ForumPost Table: Id et ThreadId .

Je veux countr toutes les inputs dans Id et ThreadId pour un user spécifique:

Extrait de code

 cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = @"SELECT dbo.ForumPost.ThreadId, " + "Id, " + " COUNT(ForumPost.Id)AS PostCount AND (ForumPost.ThreadId)AS ThreadCount" + " FROM ForumPost " + " WHERE UserName = @UserName "; cmd.Parameters.Add(new SqlParameter("@UserName", ThreadUserName)); reader = cmd.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { int postCount = Convert.ToInt16(reader["PostCount"]); int threadCount = Convert.ToInt16(reader["ThreadCount"]); AllPosts = postCount + threadCount; } } reader.Close(); 

Si un user peut avoir un nombre et un nombre d'ID ThreadId différents, vous devrez le split en requêtes distinctes.

 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 

Je devine un peu ici, mais je pense que vous voulez un décount du nombre de messages que l'user a fait et le nombre de différents (distincts) threads que l'user a participé:

 SELECT ( SELECT COUNT(Id) FROM ForumPost WHERE UserName = @UserName ) AS PostCount, ( SELECT COUNT(DISTINCT ThreadId) FROM ForumPost WHERE UserName = @UserName ) AS ThreadCount 

Lorsque vous utilisez COUNT(Column) va countr +1 pour chaque ligne qui a une valeur non nulle dans la Column . Donc, si vous select SELECT COUNT(Id) as PostCount, COUNT(ThreadId) as ThreadCount vous SELECT COUNT(Id) as PostCount, COUNT(ThreadId) as ThreadCount probablement les mêmes nombres dans les deux counts, puisque vous countz combien de lignes ont respectivement Id et ThreadId non-nul.

Quelle est votre intention est que vous voulez countr combien de messages dans combien de threads individuels a posté l'user, pour cela, vous pouvez utiliser COUNT(DISTINCT Column) :

 cmd.CommandText = @" SELECT COUNT(ForumPost.Id) AS PostCount , COUNT(DISTINCT ForumPost.ThreadId) AS ThreadCount FROM ForumPost WHERE UserName = @UserName "; 

Cependant, il n'est pas clair quelle est votre intention réelle, puisque vous mélangez cela avec la récupération de l'Id et ThreadId aussi. Vous pouvez vouloir dire que vous voulez le nombre total de messages dans chaque thread, le nombre de messages par cet user individuel dans n'importe quel fil, ou vous voulez une list de messages et un nombre total (c'est-à-dire deux requêtes séparées). Vous devrez expliquer.

Essayer

 SELECT COUNT(ForumPost.Id)AS PostCount AND (ForumPost.ThreadId)AS ThreadCount" // + " COUNT(ForumPost.ThreadId)AS ThreadCount " + " FROM ForumPost " + " WHERE UserName = @UserName "; 

Si vous select ID et ThreadID, un logging est renvoyé pour chaque, ce qui explique pourquoi vous obtenez un double count.

Faites juste

SELECT COUNT (*) à partir de ForumPost WHERE UserName = @UserName;