Подсчитать количество записей, в которых одно и то же значение появляется в одном из трех полей - PullRequest
1 голос
/ 15 января 2020

Структура таблицы для этого вопроса:

TABLE Roster; FIELDS {IDNum},{FavChs},{2ndFavChs},{3rdFavChs}

Я пытаюсь определить, сколько записей имеют одинаковое значение в одном из трех полей. Если я просто смотрю в один столбец, это просто:

Select FavChs, Count(IDNum)
FROM Roster
WHERE FavChs is not null
Group by FavChs

Однако мне нужно проверить, найдено ли такое же значение в любом из трех полей для других записей. Неважно, в каком поле он находится, просто в одном из них. Поэтому, если бы таблица была:

| IDNum | FavChs | 2ndFavChs | 3rdFavChs |
|-------|--------|-----------|-----------|
|   1   | Swiss  |   Brie    |   Feta    |
|   2   | Swiss  |   Feta    |   Cheddar |
|   3   | Cheddar|   Swiss   |   Cheddar |
|   4   | Feta   |   Swiss   |   (null)  |
|   5   | Feta   |   (null)  |   (null)  |
|   6   | Brie   |   Cheddar |   (null)  |
|   7   | Swiss  |    Swiss  |   Swiss   |
|   8   | Swiss  |   Brie    |   Cheddar |

, мне нужно было бы показать результаты:

| Cheese | Count |
|--------|-------|
|  Brie  |   3   |
| Cheddar|   4   |
|  Feta  |   4   |
|  Swiss |   6   |

1 Ответ

1 голос
/ 15 января 2020

Попробуйте:

select c.Cheese, count(r.IDNum) as Count
from
(
  select distinct FavChs as Cheese from Roster
  union
  select distinct 2ndFavChs as Cheese from Roster
  union
  select distinct 3rdFavChs as Cheese from Roster
) c
join Roster r
on (r.FavChs = c.Cheese or r.2ndFavChs = c.Cheese or r.3rdFavChs = c.Cheese)
group by c.Cheese

Не забудьте использовать Union вместо Union All, чтобы убедиться, что все значения в запросе C различны

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