Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как написать такой селект  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1053
Есть такие данные:

DECLARE @FormatProjectDimensions TABLE (
ProjectDimensionValueID INT PRIMARY KEY,
ProjectDimensionID INT
)

DECLARE @InviteDimension TABLE (
ProjectDimensionValueID INT,
InviteID INT
)

INSERT INTO @FormatProjectDimensions (972,6)
UNION
INSERT INTO @FormatProjectDimensions (977,6)
UNION
INSERT INTO @FormatProjectDimensions (1055,12)

INSERT INTO @InviteDimension (972, 316)
UNION
INSERT INTO @InviteDimension (1055, 316)
UNION
INSERT INTO @InviteDimension (977, 317)

Надо написать селект, чтобы из таблицы @InviteDimension возвращались только данные, которые есть во всех ProjectDimension, т.е. по сути должно выполняться условие для существующих данных: (ProjectDimensionID = 6 and ProjectDimensionValueID in (972, 977)) and (ProjectDimensionID = 12 and ProjectDimensionValueID in (1055)), т.е. тут получается, что только 316 удовлетворяет условию и должно быть возращено. Как динамически сформировать селект и потом его вызвать я примерно представляют. А вот можно ли как-то обойтись без динамического sql?
24 авг 12, 10:07    [13058551]     Ответить | Цитировать Сообщить модератору
 Re: как написать такой селект  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
SELECT InviteID FROM @InviteDimension as i
INNER JOIN @FormatProjectDimensions AS f
ON i.ProjectDimensionValueID = f.ProjectDimensionValueID
GROUP BY InviteID HAVING COUNT(DISTINCT ProjectDimensionID) = (SELECT COUNT(DISTINCT ProjectDimensionID) FROM @FormatProjectDimensions)
24 авг 12, 10:20    [13058599]     Ответить | Цитировать Сообщить модератору
 Re: как написать такой селект  [new]
aleks2
Guest
DECLARE @FormatProjectDimensions TABLE (ProjectDimensionValueID INT PRIMARY KEY, ProjectDimensionID INT);
DECLARE @InviteDimension	TABLE (	ProjectDimensionValueID INT, InviteID INT);	

INSERT INTO @FormatProjectDimensions 
values(972,6), (977,6),(1055,12)	

INSERT INTO @InviteDimension 
values(972, 316), (1055, 316), (977, 317)

declare @ProjectDimensionIDs table(ProjectDimensionID int primary key clustered);
insert @ProjectDimensionIDs
select distinct ProjectDimensionID from @FormatProjectDimensions

select * from @InviteDimension IDs
where not
exists(
   select * 
      from 
           ( select * from @InviteDimension where InviteID = IDs.InviteID) D 
           left outer join @FormatProjectDimensions F on D.ProjectDimensionValueID = F.ProjectDimensionValueID
           right outer join @ProjectDimensionIDs P on P.ProjectDimensionID = F.ProjectDimensionID
      where D.InviteID is null
)
24 авг 12, 10:32    [13058644]     Ответить | Цитировать Сообщить модератору
 Re: как написать такой селект  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1053
Спасибо. Вроде то, что надо.
24 авг 12, 17:43    [13061549]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить