当前位置: 代码迷 >> Sql Server >> 有两列值 怎么高效判断其的包含关系
  详细解决方案

有两列值 怎么高效判断其的包含关系

热度:20   发布时间:2016-04-24 09:48:50.0
有两列值 如何高效判断其的包含关系

如题  假设A 列 有 1,2   B 有1,2,3  那就是B包含A  
假设 A 有1,2,3,4  B 有1,2,5,6  那就是互不包含



还有这积分没有了 可咋办 能力有限回答别人的也不能被采纳
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

是表A的列包不包含表B的列吗?

问题被我说简单了  从新来  A表中有一列 a1  B表中有2列 b1 ,b2  现在需要根据b2的值进行分类 计算b1 是否包含a1  是就输出。

类似这样吧
DECLARE @COUNTA INT,@COUNTB INT,@COUNTALL INT
SELECT @COUNTA=COUNT(1)FROM A
SELECT @COUNTB=COUNT(1)FROM(SELECT b1 FROM B GROUP BY b2)C
SELECT @COUNTALL=COUNT(1)FROM(
SELECT a1 FROM A
UNION
SELECT b1 FROM B GROUP BY b2
)U
IF @COUNTA=@COUNTALL
SELECT 'A包含B'
ELSE IF @COUNTB=@COUNTALL
SELECT 'B包含A'
ELSE
SELECT '互不包含'



比如A 表
a1
3328
1111

B 表
b1 b2
100 2
1111 1
1121 1
1121 2
3328 1
3328 2

那根据b2的分类 b2 值为1的 包含 a1  值为2 的 不包含 a1






以你的测试数据,结果如下
WITH groupB AS(
SELECT b2 FROM B GROUP BY b2
)
,AWithb2 AS(
SELECT * FROM A,groupB
)
,CTE AS(
SELECT
ISNULL(T1.b2,T2.b2)b2
,COUNT(T1.a1)COUNTA
,COUNT(T2.b1)COUNTB
FROM
AWithb2 T1
FULL JOIN B T2 ON T1.a1=T2.b1 AND T1.b2 = T2.b2
WHERE
T1.b2 IS NULL OR T2.b2 IS NULL
GROUP BY
ISNULL(T1.b2,T2.b2)
)
SELECT
b2
,CASE WHEN COUNTA=0 THEN '包含A' ELSE '不包含A'END[包不包含A]
FROM
CTE

/*
1 包含A
2 不包含A
*/
  相关解决方案