Проблема:
Я хочу вернуть все строки из таблицы первичных данных вместе с исключением с наивысшим приоритетом на основе назначенного в данный момент приоритета в таблице исключений.
Я создал упрощенный пример моей настройки данных ниже (со сценариями создания), так что, надеюсь, вы сможете помочь с тем, что должно быть довольно быстрой проблемой T-SQL.
Настройка:
У меня есть первичная таблица данных, в которой каждая строка может иметь одно или несколько исключений, сохраненных в виде битовой маски.
CREATE TABLE [dbo].[PrimaryData](
Id [INT] IDENTITY(1,1) NOT NULL,
SomeData [VARCHAR](30) NOT NULL,
Exceptions [INT] NOT NULL,
)
INSERT INTO [dbo].[PrimaryData](SomeData, Exceptions)
VALUES('Data A', 0)
INSERT INTO [dbo].[PrimaryData](SomeData, Exceptions)
VALUES('Data B', 6)
INSERT INTO [dbo].[PrimaryData](SomeData, Exceptions)
VALUES('Data C', 6)
INSERT INTO [dbo].[PrimaryData](SomeData, Exceptions)
VALUES('Data D', 192)
INSERT INTO [dbo].[PrimaryData](SomeData, Exceptions)
VALUES('Data E', 132)
Исключения хранятся в справочной таблице исключительно потому, что каждому из них присвоен приоритет, назначенный пользователем. В этой таблице не может быть строк, добавленных или удаленных конечным пользователем, они просто контролируют приоритет каждого исключения с 1, являющимся самым высоким .
CREATE TABLE [dbo].[Exception](
Id [INT] IDENTITY(1,1) NOT NULL,
Priority [INT] NOT NULL,
Mask [SMALLINT] NOT NULL,
Description [VARCHAR](30) NOT NULL
)
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(1, 1, 'Exception A')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(2, 2, 'Exception B')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(3, 4, 'Exception C')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(4, 8, 'Exception D')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(5, 16, 'Exception E')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(6, 32, 'Exception F')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(7, 64, 'Exception G')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(8, 128, 'Exception H')
INSERT INTO [dbo].[Exception] (Priority, Mask, Description)
VALUES(9, 256, 'Exception I')
Поэтому на основе предоставленных образцов данных я хочу вернуть SomeData, Mask (с наивысшим приоритетом) и Description (с наивысшим приоритетом).
т.е.
| Data B | 2 | Exception B
Очевидно, что мне нужно сделать это наиболее эффективным способом, поскольку в таблице первичных данных может быть возвращено 25K строк.
Заранее спасибо.