sql 联接表中的计数在 GROUP BY 上给出错误

sql count in joined tables gives errors on GROUP BY

我卡在 SELECT 查询中,在加入的 table 上有 COUNT 个。我在 Visual Studio 2015 年 asp.net 使用 VB.net 和 SQL Server Express x86(SQL Server 12.0.2269)进行开发。

这是 tables:

Products

 - Id (PK, int, not null)
 - Number (varchar(20), not null)
 - CategoryId (int, not null)
 - Name (varchar(50), not null)
 - Description (text, not null)
 - IsActive (bit, not null)
 - Stock (int, not null)
 - SetColors (bit, not null)
 - SetSizes (bit, not null)
 - MakeId (FK, int, null)
 - StockTypeId (FK, int, not null)

Groups

 - Id (PK, FK, int, not null)
 - Name (varchar(50), not null)
 - Description (text, null)
 - Picture (image, null)

ProductGroups

 - Id (PK, int, not null)
 - ProductId (FK, int, not null)
 - GroupId (FK, int, not null)

每个产品都可以属于一个或多个组,产品组中包含的内容 table。

我需要查询 select Groups.Id、Groups.Name、Groups.Picture 以及属于每个组的产品数量,以便在数据绑定中显示 asp:ListView.

无论我尝试什么,我都会在“名称”和“图片”列中遇到错误,因为它们“未包含在聚合函数或 GROUP BY 子句中”。

我一直在互联网上寻找解决方案。这是我尝试的最后一个查询:

SELECT g.Id, g.Name, g.Picture, COUNT(DISTINCT pg.ProductId) as numProd
FROM Groups g 
LEFT JOIN ProductGroups pg ON g.Id = pg.GroupId 
GROUP BY g.Id, g.Name, g.Picture, pg.ProductId

我不知道应该在 varchar 或可为 null 的图像字段上使用什么聚合函数,也不允许对图像进行分组“无法比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符").

谁能帮我解决这个问题?

在第二步中,我还需要筛选 StockTypeId、MakeId、CategoryId、isActive 和 Stock。但是当第一步应该起作用时,这将很容易。

这应该有效,除非您的表关系有问题:

SELECT g.Id, g.Name, g.Picture, COUNT(DISTINCT pg.ProductId) asnumProd FROM Groups g LEFT JOIN ProductGroups pg ON g.Id = pg.GroupId GROUP BY g.Id, g.Name, g.Picture

我认为这个查询可以解决问题:

SELECT g.Id, g.Name, g.Picture, pg.pg_count
FROM Groups g
JOIN (Select GroupId, Count(*) as pg_count
   FROM ProductGroups Group By GroupId) pg on g.Id = pg.GroupId