Asp.net 对数据集进行分组并查找所需数据

Asp.net 对数据集进行分组并查找所需数据,asp.net,sql-server,grouping,Asp.net,Sql Server,Grouping,好的,场景是,我在数据库中有一个气泡表,如下所示: [IMAGE_ID] [int] NOT NULL, [X] [nchar](4) NOT NULL, [Y] [nchar](4) NOT NULL, [WIDTH] [nchar](4) NOT NULL, [HEIGHT] [nchar](4) NOT NULL, [TEXT] [nvarchar](max) NULL, [USER_ID] [int] NOT NULL, [DATE] [datetime] NOT NULL 用户可以为

好的,场景是,我在数据库中有一个气泡表,如下所示:

[IMAGE_ID] [int] NOT NULL,
[X] [nchar](4) NOT NULL,
[Y] [nchar](4) NOT NULL,
[WIDTH] [nchar](4) NOT NULL,
[HEIGHT] [nchar](4) NOT NULL,
[TEXT] [nvarchar](max) NULL,
[USER_ID] [int] NOT NULL,
[DATE] [datetime] NOT NULL
用户可以为图像插入n个气泡。我在图像详细信息中为图像选择所有气泡,因为我将它们列为条目。现在,我需要对这些结果进行分组,并找到一种方法为每个用户放置一个图像,但仍然在图像上插入所有用户气泡。我想不出一个好办法

我是否必须进行2次选择:1次不同的imageId+用户ID用于图像计数,1次常规选择用于气泡


谢谢

这可以通过递归实现。CTE的第一部分将根据图像id提取记录。然后,您可以使用此信息筛选出与用户id匹配但与图像id不匹配的数据,因为该记录已由查询的第一部分返回

;WITH bub (IMAGE_ID, X, Y, WIDTH, HEIGHT, TEXT, USER_ID, DATE)
AS ( SELECT IMAGE_ID, X, Y, WIDTH, HEIGHT, TEXT, USER_ID, DATE
     FROM Bubble
     WHERE IMAGE_ID = @image_id
     UNION 
     SELECT b.IMAGE_ID, b.X, b.Y, b.WIDTH, b.HEIGHT, b.TEXT, b.USER_ID, b.DATE
     FROM Bubble b
     JOIN bub bb
       ON b.USER_ID = bb.USER_ID
      AND b.IMAGE_ID <> bb.IMAGE_ID)
SELECT * FROM bub

注:本表:;在前面,需要使用。要求终止上一份声明,并附上:;在公共表表达式之前。将;前面的WITH不太容易出错。

您研究过LINQ to SQL吗?如果您在模式中指定PKs和FKs,这将使任务更容易。我不会在这个项目中使用ORM,所以这不是一个选项。