我可以知道如何在SQL Server中构造跟随查询吗?

时间:2018-09-16 06:16:27

标签: sql sql-server

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时)

3 个答案:

答案 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);