这可能实际上已经发布了,但是建议的问题并未显示出来,并且为标题找到正确的单词本身就是一项任务。

给定这3列,我试图找到正确的SQL查询以在特定条件下管理重复项:

ColumnA | ColumnB | ColumnC
---------------------------
   1    |    1    |   A
   1    |    2    |   A
   2    |    2    |   B
   2    |    2    |   A
   2    |    2    |   B
   1    |    2    |   B


所以我的计数器应该是出现的次数-C的条件
规则是,可以将ColumnA分配给ColumnB的数目,其中ColumnC为A或B,并且计数为1。如果将ColumnA分配给ColumnB的数目并且在ColumnC中具有第二个A或B,则该计数为2。 1/1 / A 1/1 / B = 1)(1/1 / A 1/1 / A = 2)。

在此之后,上表等于4:


1/1 / A = 1
1/2 / A = 1
2/2 / B = 1
2/2 / A = 0
2/2 / B = 1
1/2 / B = 0


在C#中,我已经进行了一些管理,以存储值并比较枚举器以对此进行检查

//If the hash table fails to add due to a duplicate then thats a second count of it existing (and breaks the rule of 1 per A and B
if(!hash.Add(new Tuple<int, int, ColumnType>(itemA.ColumnA, itemA.ColumnB, itemA.ColumnC)))
{
    count++;
}
else
{
    //If the table contains the counter part (so if this is 1/1/A is there a 1/1/B)
    if(hash.Contains(new Tuple<int, int, ColumnType>(itemA.ColumnA, itemA.ColumnB, (itemA.ColumnC == ColumnType.A ? ColumnType.B : ColumnType.A))))
    {
        //There is so take a point off as thats allowed
        count--;
    }
    else
    {
        //The item was added to the hash table normally and theres no counter part
        count++;
    }
}


当然,我正在研究提高效率,使用哈希集代替另一个类,该类仅用于在较慢的字典中添加和迭代。这要快得多,而且我假设通过SQL Command直接引用计数仍会更快。

最佳答案

你可以做:

int count = YourTable.GroupBy(x=> new {x.ColumnA, x.ColumnB, x.ColumnC})
.Select(g => g.Key)
.Distinct()
.Count();

关于c# - SQL查找组Column A和Count在C中的Column的重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52444820/

10-16 15:46