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
我卡在 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