首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL using count in case语句

问SQL using count in case语句
EN

Stack Overflow用户
提问于 2017-04-12 19:07:25
回答 4查看 2.2K关注 0票数 1

我正在尝试将计数小于5的所有活动分组(出于数据共享的原因)。

ID代码和ID名称给了我较高级别的编号,但一旦我包括“商店代码”,我就会得到一些去过一两次零星商店的客户的较低级别的编号。

代码语言:javascript
复制
Select  Count(*) [Activity],
        T.[ID Code],
        T.[ID Name],
        Case when Count(*) < 6 then 'Other Shop' Else T.Shop End [Shop Code]
From    MyTable T
Group By T.[ID Code],
         T.[ID Name],
         Case when Count(*) < 6 then 'Other Shop' Else T.Shop End

但很明显,我不能在case语句中使用count。我已经尝试了一些类似问题的解决方案,但都不起作用!

谢谢

EN

回答 4

Stack Overflow用户

发布于 2017-04-12 19:10:11

问题出在GROUP BY

代码语言:javascript
复制
Select  Count(*) as [Activity],
        T.[ID Code],
        T.[ID Name],
        (Case when Count(*) < 6 then 'Other Shop' Else T.Shop
         End) as [Shop Code]
From    MyTable T
Group By T.[ID Code],
         T.[ID Name];

聚合函数(或带有聚合的表达式)不属于GROUP BY。这些值是在SELECT中计算的,而不是用于定义组。

票数 1
EN

Stack Overflow用户

发布于 2017-04-12 19:17:07

您可以使用HAVING和UNION ALL语句,如下所示:

代码语言:javascript
复制
Select  Count(*) as [Activity],
    T.[ID Code],
    T.[ID Name],
    'Other Shop' [Shop Code]
 From MyTable T
Group By T.[ID Code],
      T.[ID Name]
having Count(*) < 6
 union all
Select  Count(*) as [Activity],
    T.[ID Code],
    T.[ID Name],
    T.Shop [Shop Code]
 From MyTable T
Group By T.[ID Code],
      T.[ID Name]
having Count(*) >= 6
票数 0
EN

Stack Overflow用户

发布于 2017-04-12 19:24:11

代码语言:javascript
复制
select 
count(*) as activity,
code,
name,
Case when Count(*) < 6 then 'Other Shop' Else shopcode End as shopcode
from mytable group by code, name ,shopcode
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43367860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档