Sql server MSSQL有子句,我不知道我的查询出了什么问题

Sql server MSSQL有子句,我不知道我的查询出了什么问题,sql-server,syntax-error,Sql Server,Syntax Error,我是MSSQL新手,在这里我碰到了一堵墙,我试图做的是在对属性数量的值进行求和和和分组后获得最大值。在执行了我在下面编写的查询之后,我发现这个错误语法不正确 Select BookID, Sum(OrderMem.Quantity) from OrderMem Group By BookID Having Sum(OrderMem.Quantity) = (select MAX(Quantity) from (Select Su

我是MSSQL新手,在这里我碰到了一堵墙,我试图做的是在对属性数量的值进行求和和和分组后获得最大值。在执行了我在下面编写的查询之后,我发现这个错误语法不正确

Select BookID, Sum(OrderMem.Quantity)
from OrderMem
Group By BookID
Having Sum(OrderMem.Quantity) = (select MAX(Quantity) 
                                 from (Select Sum(OrderMem.Quantity)
                                       from OrderMem
                                       group by BookID
                                      )
                                );
*涉及的表名为[OrderMem]
请帮助并感谢:

如果您在SQL server>=2016,那么您可以使用

声明@OrderMem表 书号整型 , 数量整数 ; 插入@OrderMem 价值观 1, 3, 1, 2, 2, 4, 2, 5, 3, 3, 3, 2, 3, 1 ;具有 CTE 像 选择BookID、SUMQuantity和Quantity 来自@OrderMem OrderMem 按BookID分组 选择前1名 书号,数量 来自CTE 按数量说明订购 或者,正如有人已经提到的,您需要为列和select的结果添加别名

选择BookID,SumOrderMem.Quantity 来自OrderMem 按BookID分组 在select MAXa.QUOTE中具有SUMORDEMEM.QUOTE 从中选择SumOrderMem.Quantity 来自OrderMem 按BookID分组 A. ;
正如注释中提到的,您忘记在最内部的子查询中将SumOrderMem.Quantity别名为Quantity。 但您可以通过对结果进行降序排序并仅获取最上面的行来简化查询:

select top 1 with ties 
       BookID, Sum(OrderMem.Quantity) qty
from OrderMem
group by BookID
order by qty desc

开始正确地格式化它,以便您可以看到括号是如何工作的;在第三个select中,您需要为列别名。选择sumOrderMem.Quantity作为Quantity@avery_larry是正确的-第二个嵌套的select需要一个别名,否则在第一个嵌套的select MAXQuantity中引用了一个不存在的列。@TomTom我已经对括号进行了双重检查,因为我是一个非常粗心的人,但我想我在这里没有犯这样的错误,非常感谢您的回复!如果所说的SQL server>=2016是指SQL server 2005,则是的,SQL server 2005及更新版本支持CTE-谢谢,先生,您提出的第一个解决方案对我来说是全新的,所以我需要一些时间来消化它。至于第二个解决方案,是否尝试为第二个嵌套select创建临时表?您将其命名为?Owh,这样带领带的单词可以显示超过1个最大值?这对我来说是一件新鲜事,非常感谢男人。As声明也可以忽略?没错,对于你的两个问题。哎呀,我试着接受两个答案,可能吗?这是y第一次在堆栈溢出中提出问题