0

所以我有这个:

    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 查询返回的行数。这样我就可以得到加入这个“原因”的实际成员(来自原因)。

你的投入?谢谢

4

3 回答 3

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为 a LEFT OUTER JOIN。如果没有 CauseMembers,则NULL不会计算来自外部联接的,因此您将得到零。

于 2012-05-03T18:14:46.457 回答
1

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

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

于 2012-05-03T17:46:09.480 回答
0

这会给你计数,但不是其他字段。另一种方法是使用嵌入式选择语句

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 ;";
于 2012-05-03T17:52:24.003 回答