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