sql查询返回连接表中的行数

时间:2012-05-03 17:40:37

标签: c# sql sql-server

所以我有这个:

    const string sqlString =
        "SELECT * FROM Causes c INNER JOIN CauseMembers m ON " +
        "(c.Id = m.CauseId) AND (UserName = @UserName) " +
        "ORDER BY c.DateTime DESC;";

工作正常,但是我想从表causemembers返回一个生成的列,其中包含从此查询返回的行数。这样我就可以得到加入这个'因果'的实际成员(来自原因)。

您的意见?感谢

3 个答案:

答案 0 :(得分:1)

由于您已经返回所有列(*)并且已标记C#,因此看起来您正在将结果加载到DTO(或ADO.NET对象)中。

为什么不直接计算结果对象中的行/项数?

答案 1 :(得分:1)

如果您使用的是SQL Server 2005或更高版本,则可以使用窗口函数:

SELECT <ALL COLUMNS YOU'RE INTERESTED IN>, COUNT(m.CauseId) OVER (PARTITION BY c.ID)
FROM Causes c JOIN CauseMembers m ON (c.Id = m.CauseId) AND (UserName = @UserName)
ORDER BY c.DateTime DESC

这将为您计算每个原因ID返回的行数。如果您想确保返回每个原因,无论是否有任何成员,请将JOIN更改为LEFT OUTER JOIN。如果没有CauseMembers,那么外部联接中的NULL将不会被计算,因此您将获得零。

答案 2 :(得分:0)

这将获得计数,但不会获得其他字段。另一种方法是使用

使用嵌入式select语句
const string sqlString =
"SELECT c.ID, COUNT(m.causeID) FROM Causes c RIGHT OUTER JOIN CauseMembers m ON " +
"(c.Id = m.CauseId) AND (UserName = @UserName) " +
"GROUP by c.ID ;";