CREATE TABLE (
A INT NOT NULL,
B INT NOT NULL
)
A是1、2、3、4、5的枚举值
B可以是任何值
我想用A的特定子集(例如{1,2}
示例:
A B
1 7 *
2 7 *
3 7
1 8 *
2 8 *
1 9
3 9
当B = 7,A = 1、2、3时
当B = 8,A = 1,2。很好
当B = 9时,A = 1,3。不满足,则缺少2个
所以计数将是2(当B = 7和8时)
答案 0 :(得分:1)
如果我对您的理解正确,我们想找到B
中既有1
又有2
的{{1}}值,然后我们要知道我们有几个。
此查询执行以下操作:
A
declare @t table (A int not null, B int not null)
insert into @t(A,B) values
(1,7),
(2,7),
(3,7),
(1,8),
(2,8),
(1,9),
(3,9)
select COUNT(DISTINCT B) from (
select B
from @t
where A in (1,2)
group by B
having COUNT(DISTINCT A) = 2
) t
中的一个或两个可能是不必要的-这取决于您的数据是否可以包含重复值。
答案 1 :(得分:0)
如果我理解正确,并且要求找到带有一系列“ A”且没有任何“空白”的B,则可以比较最小A和最大A与记录数之间的差异(当然,每个B ):
SELECT b
FROM mytable
GROUP BY b
HAVING COUNT(*) + 1 = MAX(a) - MIN(a)
答案 2 :(得分:0)
SELECT COUNT(DISTINCT B) FROM TEMP T WHERE T.B NOT IN
(SELECT B FROM
(SELECT B,A,
LAG (A,1) OVER (PARTITION BY B ORDER BY A) AS PRE_A
FROM Temp) K
WHERE K.PRE_A IS NOT NULL AND K.A<>K.PRE_A+1);