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からこのクエリから返された行数を含む生成された列を返したいと思います。この「原因」に参加した実際のメンバーを取得できるように(Causesから)。

あなたのインプット?ありがとう

4

3 に答える 3

1

すでにすべての列(*)を返し、C#にタグを付けているため、結果をDTO(またはADO.NETオブジェクト)に読み込んでいるように見えます。

結果のオブジェクトの行/アイテムの数を数えてみませんか?

于 2012-05-03T17:46:09.480 に答える
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、外部結合からはカウントされないため、ゼロになります。

于 2012-05-03T18:14:46.457 に答える
0

これにより、カウントは取得されますが、他のフィールドは取得されません。もう1つの方法は、次を使用して埋め込み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 ;";
于 2012-05-03T17:52:24.003 に答える