SQL Поиск дубликатов группы Column A и ColumnB, где Count в C - PullRequest
0 голосов
/ 21 сентября 2018

Это, возможно, было на самом деле опубликовано, но рекомендованные вопросы не показали никакого света, и поиск правильных слов для заголовка был самой задачей.

Учитывая эти 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 и имеет второй A или B в ColumnC, то это считается как 2. (1/1 / A 1/1 / B = 1) (1/1 / A1/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++;
    }
}

Конечно, я смотрю на повышение эффективности, использование хэш-набора яs замена другого класса, который просто работает над добавлением и повторением словаря, который был медленнее.Это быстрее, чем это, и я предполагаю, что прямая ссылка на счет через команду SQL будет еще быстрее.

1 Ответ

0 голосов
/ 21 сентября 2018

вы можете сделать:

int count = YourTable.GroupBy(x=> new {x.ColumnA, x.ColumnB, x.ColumnC})
.Select(g => g.Key)
.Distinct()
.Count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...