Группировать набор данных и находить нужные данные - PullRequest
0 голосов
/ 10 февраля 2011

Хорошо, сценарий таков, у меня есть таблица Bubble в базе данных следующим образом:

[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 пузыря для изображения.Я выбираю все пузырьки для изображения на детали изображения, так как я буду перечислять их в качестве записей.Теперь мне нужно сгруппировать эти результаты и найти способ разместить по 1 изображению для каждого пользователя, но при этом вставить на него все пользовательские пузырьки.Я не мог придумать хороший способ сделать это.

Должен ли я сделать 2 выбора: (1 отдельный imageId + userId для количества изображений) и (1 обычный выбор для пузырьков)?

Спасибо

1 Ответ

0 голосов
/ 31 марта 2011

Это возможно с рекурсивным общим табличным выражением . Первая часть CTE подберет запись, основанную на image_id. Эту информацию вы можете затем использовать для фильтрации данных, которые соответствуют USER_ID, но не IMAGE_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. Требуется завершить предыдущий оператор с ; перед вашим общим выражением таблицы. Помещение ; перед WITH менее подвержено ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...