SQL group by子句错误子查询返回的值超过1。当子查询后跟=、!=、时,不允许这样做,

SQL group by子句错误子查询返回的值超过1。当子查询后跟=、!=、时,不允许这样做,,sql,sql-server-2008,group-by,Sql,Sql Server 2008,Group By,我有一个按组计算活动客户的查询,并且必须按组计算接收 SELECT [Category] = ISNULL(c.Category, 'Total'), COUNT (hs.ClientID) as '3 Mo Clients', (COUNT (hs.ClientID))/3 as MoAVG ,(select COUNT(PickupID)from Pickup where PickupDate between '2013-01-01' and '

我有一个按组计算活动客户的查询,并且必须按组计算接收

SELECT  [Category] = ISNULL(c.Category, 'Total'),
        COUNT (hs.ClientID) as '3 Mo Clients',
        (COUNT (hs.ClientID))/3 as MoAVG
      ,(select COUNT(PickupID)from Pickup where PickupDate between '2013-01-01' and '2013-03-30' group by CategCode) as '3 Mo Picups'

FROM    Category c 
        LEFT JOIN history hs
            ON hs.CategCode = c.CategCode 
            where ReccordDate between '2013-01-01' and '2013-03-30'
GROUP BY Category
WITH ROLLUP
此查询引发错误:
子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。

如果我没有在4行中使用group by,它会工作,但不会按组划分皮卡。 这是一个示例,在代码的第4行中没有GROUPBY子句时,它是如何工作的


有没有办法解决这个问题?

尝试添加以下条件:CategCode=c.CategCode

SELECT [Category] = ISNULL(c.Category, 'Total'),
       COUNT (hs.ClientID) as [3 Mo Clients],
       (COUNT (hs.ClientID))/3 as MoAVG
      ,(SELECT COUNT(PickupID) 
        FROM Pickup 
        WHERE PickupDate between '2013-01-01' and '2013-03-30'
          AND  CategCode = c.CategCode
       ) AS [3 Mo Picups]
FROM Category c LEFT JOIN history hs ON hs.CategCode = c.CategCode 
WHERE ReccordDate between '2013-01-01' and '2013-03-30'
GROUP BY c.CategCode, c.Category 
WITH ROLLUP


愚蠢的评论:三月有31天。@ypercube现在不重要,它将从用户那里获取数据。是
CategCode
在pickupUp中为什么不加入pickup而不是使用子查询?我尝试了这个wariant,它也给了我这个错误
Msg 8120,级别16,状态1,第7行“Category.CategCode”列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
客户端类别的名称pic上的第一列如果我将
与ROLLUP一起使用
它将total放在每列下:(但它起作用。第二个示例不将此行作为[3个月Picups]但是可以,我会先用它,然后只计算总数,不会用
加上汇总
你知道方法吗
加上汇总
不给每组加总行,但不在响应的最后?
SELECT [Category] = ISNULL(c.Category, 'Total'),
       COUNT (hs.ClientID) as [3 Mo Clients],
       (COUNT (hs.ClientID))/3 as MoAVG,
       SUM(o.cnt) AS [3 Mo Picups]
FROM Category c LEFT JOIN history hs ON hs.CategCode = c.CategCode
                CROSS APPLY (
                             SELECT COUNT(PickupID) AS cnt
                             FROM Pickup 
                             WHERE PickupDate between '2013-01-01' and '2013-03-30'
                               AND  CategCode = c.CategCode
                             ) o
WHERE ReccordDate between '2013-01-01' and '2013-03-30'
GROUP BY c.Category 
WITH ROLLUP