SQL Server 由于聚合数据而无法查询,原因是什么?

vwkv1x7d  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(162)

我们有一个包含3家书店的数据库,所有书店都附有库存清单和随机库存单位的图书。查询应该显示每家书店,因此有3行,后面是数量(X书店中哪本书的值最高,用MAX(INV.UnitsInStock)计算),最后是第三列,显示相应图书的标题。

SELECT BS.Name, B.Title, MAX(UnitsInStock) AS 'Quantity'
FROM Inventories AS INV
JOIN BookShops AS BS ON BS.Id = INV.ShopId
JOIN Books AS B ON B.Id = INV.BookId
GROUP BY BS.Name

这会产生以下错误:
列“Books.Title”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。
我也试过这个:

SELECT BS.Name, MAX(UnitsInStock) AS 'Quantity'
FROM Inventories AS INV
JOIN BookShops AS BS ON BS.Id = INV.ShopId
JOIN Books AS B ON B.Id = INV.BookId
GROUP BY BS.Name

这显示了到目前为止的正确数据,但没有书名。
我试过临时表,string_agg()(它能正确显示每一本书),试过在找到每一本书后对每一本书进行硬编码等等。
我该如何解决这个问题?

83qze16e

83qze16e1#

我认为您需要将B.Title添加到GROUP BY中:

SELECT BS.Name,B.Title, MAX(UnitsInStock) AS 'Quantity'
FROM Inventories AS INV
JOIN BookShops AS BS ON BS.Id = INV.ShopId
JOIN Books AS B ON B.Id = INV.BookId
GROUP BY BS.Name, B.Title

相关问题