让我们从数据开始:
DECLARE @Avengers TABLE ([Hero] varchar(32), [Preference] varchar(32));
INSERT INTO @Avengers VALUES
('Captain_America','gingers'),('Captain_America','blondes'),
('Captain_America','brunettes'),('Hulk','gingers'),('Hulk','blondes'),
('Hawkeye','gingers'),('Hawkeye','brunettes'),('Iron_Man','blondes'),
('Iron_Man','brunettes'),('Thor','gingers'),('Nick_Fury','blondes');
现在我想将@Preferences
作为[Preference]
列表(逗号分隔或单列表参数)传递,而不知道我将获得多少参数,并根据此选择[Hero]
谁更喜欢参数(列表)中提供的完全这些@Preferences
,我的意思是,如果我在'blondes'
和'gingers'
之后,那么我在'Hulk'
仅之后
(不'Captain_America'更喜欢'金发女郎','gingers'和'黑发''。
我想得到类似的东西:
SELECT [Hero]
FROM @Avengers
WHERE *IS_ASSIGNED_ONLY_TO_THE_LIST*([Preference]) = @Preference
答案 0 :(得分:2)
好吧,我认为我的代码过于复杂,但它确实有效。
SELECT a.Hero, COUNT(*), MIN(p.N)
FROM @Avengers a
LEFT JOIN ( SELECT *, COUNT(*) OVER() N
FROM @Preferences) p
ON a.Preference = p.Preference
GROUP BY a.Hero
HAVING COUNT(*) = MIN(p.N)
AND COUNT(*) = COUNT(p.Preference)
;
我正在使用@Preferences
作为表格。