Я пытаюсь что-то сделать, но не уверен, что это возможно. Я действительно не знаю, как найти что-то подобное, поэтому задаю здесь вопрос.
Скажите, что это моя таблица:
Name | Group
-----+--------
John | Alpha
Dave | Alpha
Dave | Bravo
Alex | Bravo
Я хочу сделать что-то вроде этого:
SELECT TOP 1 CASE
WHEN Group = 'Alpha' THEN 1
WHEN Group = 'Bravo' THEN 2
WHEN Group = 'Alpha' AND
Group = 'Bravo' THEN 3
ELSE 0
END AS Rank
FROM table
WHERE Name = 'Dave'
Я понимаю, почему это не сработает, но это был лучший способ объяснить, что я пытаюсь сделать. По сути, мне просто нужно знать, когда один человек является частью обеих групп. Есть ли у кого-нибудь идеи, которые я мог бы использовать?
Похоже, это XY проблема. Что вы собираетесь делать со значением 3 (или 2, или 1) для Дэйва? Что произойдет, когда Дэйв войдет в дополнительную группу? Или меняет альфа на дельту?
Будут только Альфа и Браво. Мне просто нужно знать, находится ли кто-то в Альфе, Браво или обоих. Проблемы с ОБЕИМ частями.
Пожалуйста, проверьте мой обновленный ответ, я думаю, вы усложнили свое требование.
Вы должны создать столбец для хранения значений, которые вы хотите суммировать и суммировать, вероятно, проще всего сделать это с помощью подзапроса:
Select Name, SUM(Val) as Rank
FROM (SELECT Name, CASE WHEN Group = 'Alpha' THEN 1
WHEN Group = 'Bravo' THEN 2
ELSE 0 END AS Val
FROM table
WHERE Name = 'Dave') T
GROUP BY Name
При необходимости вы можете добавить TOP 1
и ORDER BY SUM(Val)
, чтобы получить верхнюю строку.
После прочтения вашего комментария его можно упростить до:
Select Name, COUNT([GROUP]) GroupCount
FROM table
GROUP BY Name
HAVING COUNT([GROUP]) > 1
Это просто вернет все имена, в которых у них более 1 группы.
Кажется, что в качестве решения он приближается к битовой маске. Delta
будет равняться 4
, Gamma
будет равняться 8
и так далее ... Тогда каждое значение может быть возвращено глядя на соответствующий бит целого числа, сгенерированного здесь. Хотя OP на самом деле просто смотрит на alpha
и bravo
, в результате он хорошо масштабируется.
@JNevill да, может работать, но OP заявил в комментариях, что это только 2 значения: Alpha и Bravo
@JNevill, на самом деле, его последний комментарий значительно упрощает проблему, ему просто нужно сгруппировать с предложением наличия.