Sql Server 奇怪的 CASE 语句

斯特克尔

我正在尝试做某事,但我不确定是否可能。我真的不知道如何查找这样的东西,所以我在这里问一个问题。

说这是我的桌子:

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 1ORDER BY SUM(Val)获取排名靠前的行。

阅读您的评论后,可以进一步简化为:

Select Name, COUNT([GROUP]) GroupCount
FROM table         
GROUP BY Name
HAVING COUNT([GROUP]) > 1

这将简单地返回超过 1 个组的所有名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章