在case语句中使用count的SQL

在case语句中使用count的SQL,sql,count,group-by,case,Sql,Count,Group By,Case,出于数据共享的原因,我正在尝试对计数小于5的所有活动进行分组 ID代码和ID名称为我提供了高级编号,但一旦我包含了店铺代码,我就会为去一到两次零散店铺的客户提供一些低级编号 Select Count(*) [Activity], T.[ID Code], T.[ID Name], Case when Count(*) < 6 then 'Other Shop' Else T.Shop End [Shop Code] From MyTa

出于数据共享的原因,我正在尝试对计数小于5的所有活动进行分组

ID代码和ID名称为我提供了高级编号,但一旦我包含了店铺代码,我就会为去一到两次零散店铺的客户提供一些低级编号

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
但显然我不能在案件陈述中使用计数。我试过一些解决类似问题的方法,但都不管用

谢谢

问题在于小组成员:

具有聚合的聚合函数或表达式不属于GROUP BY。它们在SELECT中计算,不用于定义组。

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

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

下面的示例是SQL Server中的一个测试

它使用窗口功能进行计数,以更改车间代码。 然后将其全部分组,包括修改后的商店代码

声明@ShopTable table[ID Code]varchar30,[ID Name]varchar30,Shop varchar30; 在@ShopTable[ID Code]、[ID Name]中插入店铺值 ‘S1’、‘1号店’、‘AA’, ‘S1’、‘1号店’、‘BB’, ‘S1’、‘1号店’、‘BB’, ‘S1’、‘1号店’、‘CC’, ‘S1’、‘1号店’、‘CC’, ‘S1’、‘1号店’、‘CC’, ‘S2’、‘2号店’、‘XX’, ‘S2’、‘Shop 2’、‘YY’; 选择 将*计为[活动], [身份证号码], [身份证名称], [店铺代码] 从…起 选择 [身份证号码], [身份证名称], 当按[ID代码]、[ID名称]<6在分区上计数*时,则“其他店铺”或“其他店铺”结束为[店铺代码] 来自@ShopTable Q 按[身份证代码]、[身份证名称]、[店铺代码]分组;
大小写表达式,而不是语句。
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
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