首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在用来GROUP BY子句分组依据列表的表达式中不能使用聚合或子查询

2012-12-15 
在用于GROUP BY子句分组依据列表的表达式中不能使用聚合或子查询。我在VS2005 ASP.NET2.0中,写如下查询语句

在用于GROUP BY子句分组依据列表的表达式中不能使用聚合或子查询。
我在VS2005 ASP.NET2.0中,写如下查询语句:
SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] FROM [product] WHERE [ProductID] IN(SELECT TOP 10 [ProductID] FROM [comment] GROUP BY COUNT([ProductID]) ORDER BY [ProductID] DESC)

然后提示错误:
 GROUP BY 子句分组依据列表的表达式中,不能使用聚合或子查询。 
备注:
1(该语句我在SQL 2000中,我运行了,能得出正确结果)
2 我再做一个小型购物网站,该SQL语句想实现的功能是:通过查询表comment,得出评论数最多的前十条记录的ProductID,然后在product表中,查询商品的具体信息

我提出的问题可能长了点,所以劳烦大家了,希望大家给我支招,谢谢!

[最优解释]


SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] 
FROM [product]
WHERE [ProductID] IN(SELECT TOP 10 [ProductID] FROM [comment] GROUP BY [ProductID] ORDER BY Count([ProductID]) DESC)

[其他解释]
SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] FROM [product] WHERE [ProductID] IN(
select TOP 10 COUNT([ProductID]) over(partition by [ProductID]) PIDASC from [comment]
ORDER BY PIDASC DESC)
上边写错了,在我这么好用.
[其他解释]
后半部分的条件是不是可以这样:

WHERE [ProductID] IN(SELECT TOP 10 [ProductID] 
                     FROM(
                               SELECT [ProductID], 
                                  COUNT([COMMENTS])
                           FROM [comment] 
                           GROUP BY [ProductID]/*COUNT([ProductID]) 这里不能这样*/ 
                           ORDER BY [ProductID] DESC)
                     )

就是先把 COMMENT 表中的PRODUCTID按照评论多少先查出来形成一个表, 然后再在其中选择前10位. 
[其他解释]
帮顶,下,
每天回帖可获10分可用分
[其他解释]
sql 2000 真的能运行吗?

[其他解释]
在SQL 2000中,能运行?
[其他解释]


SELECT [ProductID], 
       [ProdName], 
       [ProdCatorgory], 
       [ProdDesn], 
       [ProdCreateDate], 
       [ProdSellInDate], 
       [ProdQuantity], 
       [ProdInPrice], 
       [ProdOutPrice], 
       [PictureID] 
FROM [product] 
WHERE [ProductID] IN(SELECT TOP 10 [ProductID] 
                     FROM [comment] 
                     GROUP BY [ProductID]/*COUNT([ProductID]) 这里不能这样*/ 
                     ORDER BY [ProductID] DESC)

[其他解释]
引用:
引用:
在SQL 2000中,能运行?

能运行,且能得到正确结果

你确定没看错吗
[其他解释]
帮顶,下,
每天回帖可获10分可用分
[其他解释]
引用:
在SQL 2000中,能运行?

能运行,且能得到正确结果

[其他解释]
引用:
SQL code
SELECT [ProductID], 
       [ProdName], 
       [ProdCatorgory], 
       [ProdDesn], 
       [ProdCreateDate], 
       [ProdSellInDate], 
       [ProdQuantity], 
       [ProdInPrice],……

  GROUP BY [ProductID]/*COUNT([ProductID]) 这里不能这样*/ 
我明白这块有问题
但是你这样改之后,就得不到,我要的结果:我想通过评论的次数,然后再判断,用Group分类
[其他解释]
引用:
引用:
引用:
在SQL 2000中,能运行?

能运行,且能得到正确结果

你确定没看错吗

当然,能得到正确结果
[其他解释]
引用:
后半部分的条件是不是可以这样:

WHERE [ProductID] IN(SELECT TOP 10 [ProductID] 
  FROM(
  SELECT [ProductID], 
  COUNT([COMMENTS])
  FROM [comment] 
  GROUP BY [ProductID]/*COUNT([ProductID]) 这里不能这样*/ 
  ORD……

感谢你,提出了建议,我刚才试验了,不能运行,说是:有语法错误!
[其他解释]
SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] FROM [product] WHERE [ProductID] IN(


select TOP 10  COUNT([ProductID]) over(partition by ycny ) PIDASC from [comment]
ORDER BY PIDASC  DESC)

看看行不行.
[其他解释]

引用:
SQL code

SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] 
FROM [product]
WHERE [Product……

感谢你提供的方法,你的方法成功的解决了我的方法!再一次表示感谢!
[其他解释]
引用:
sql 2000 真的能运行吗?

能运行,
现在15楼已解决该问题,不过还是很感谢你的参与!
[其他解释]
帮顶,下,
每天回帖可获10分可用分 
[其他解释]
引用:
SELECT [ProductID], [ProdName], [ProdCatorgory], [ProdDesn], [ProdCreateDate], [ProdSellInDate], [ProdQuantity], [ProdInPrice], [ProdOutPrice], [PictureID] FROM [product] WHERE [ProductID] IN(
select……

多谢你两次提出解决方案,不幸的是,不能运行,报错是:“over附近出现语法错误!”
现在15楼已成功的解决了我的问题!
不管怎么样,我还是要再一次表示感谢!

热点排行
Bad Request.