从表中选择所有数据,但为特定列值添加计数字段

时间:2013-01-09 17:21:43

标签: c# sql linq

我想SELECT来自特定表的所有数据,方法是在结果中添加countField,计算所有结果中相应Item.ResourceId存在的次数。

SELECT Name, ResourceId, (SELECT COUNT(ResourceId) FROM Item GROUP BY ResourceId) AS foo
FROM Item

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:2)

如果这是您想要的查询

SELECT Name, ResourceId, COUNT(*) FROM Item GROUP BY Name, ResourceId;

它转换为LINQ如下。

var result = items.GroupBy(item => new { item.Name, item.ResourceId })
                  .Select(group => new { group.Key.Name, group.Key.ResourceId, Count = group.Count() })
                  .ToList();

或者你想要这个查询吗?

SELECT Name,
       ResourceId,
       (SELECT COUNT(*) FROM Item y WHERE y.ResourceId = x.ResourceId)
FROM
       Item x;

这转换为以下LINQ表达式。

var result = items.Select(item => new
             {
                 item.Name,
                 item.ResourceId,
                 Count = items.Count(x => x.ResourceId == item.ResourceId)
             }).ToList();

给出以下输入

Name   ResourceId
-----------------
 A      1
 A      1
 B      1
 B      2
 B      2
 C      3

第一个查询产生

Name   ResourceId   Count
-------------------------
 A      1            2
 B      1            1
 B      2            2
 C      3            1

而第二个查询产生了这个。

Name   ResourceId   Count
-------------------------
 A      1            3
 A      1            3
 B      1            3
 B      2            2
 B      2            2
 C      3            1

答案 1 :(得分:0)

这有用吗?

SELECT resourceId,count(resourceId)FROM Item GROUP BY resourceId

答案 2 :(得分:0)

SELECT Name,ResourceId,ResourceIdCount 来自项目i 内部联接 ( SELECT ResourceId,COUNT(ResourceId)AS ResourceIdCount FROM Item GROUP BY ResourceId ) 我知道了 ON i.ResourceId = ic.ResourceId