我正在尝试做某事,但我不确定是否可能。我真的不知道如何查找这样的东西,所以我在这里问一个问题。
说这是我的桌子:
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'
我明白为什么这行不通,但这是我可以解释我正在尝试做的事情的最佳方式。基本上,我只需要知道一个人何时属于这两个群体。有没有人有任何我可以使用的想法?
您应该创建一个列来保存要对它们求和的值并对其求和,这可能最容易通过子查询来完成:
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 个组的所有名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句