在Sql Server中,我试图按ID对匹配行进行分组。
空值被认为是通配符。
说明:匹配的行是什么意思?
匹配行意味着–即使两行的所有列都匹配。
匹配列的平均值–相同的值('A'='A')或每个值都为空值('A'/'B'/'C'/ ... = NULL)。
在我的示例中:
第1行与第2行匹配– 因为:
第一列:“ A” =“ A”
第二列:“ B” = NULL
第三列:NULL ='C'
第1行不与第4行匹配:
第一列:“ A” =“ A”
第二列:'B'!='D'
第三列:NULL = NULL。
比较失败,因为第二列中的值不匹配。
有人可以帮助我使用sql吗?
例如:
用于创建测试表:
create table test_table (
id int,
column1 varchar(20),
column2 varchar(20),
column3 varchar(20)
);
insert into test_table (id, column1, column2, column3) values
(1, 'A', 'B', NULL),
(2, 'A',NULL, 'C'),
(3, 'A', 'B', 'D'),
(4, NULL, 'D', NULL),
(5, 'A', 'B', 'D');
例如表格
这是预期的结果:
group id 1: {1,2}
group id 2: {1,3,5}
group id 3: {2,4}
和不是该组:{1,2,3}。
表中预期结果的示例:
答案 0 :(得分:1)
每当一个值为NULL
时,您都需要跳过特定的列连接条件,因此只需在OR
中使用几个IS NULL
。试试这个:
SELECT
T1.id,
T2.id
FROM
test_table AS T1
INNER JOIN test_table AS T2 ON
(T1.column1 = T2.column1 OR T1.column1 IS NULL OR T2.column1 IS NULL) AND
(T1.column2 = T2.column2 OR T1.column2 IS NULL OR T2.column2 IS NULL) AND
(T1.column3 = T2.column3 OR T1.column3 IS NULL OR T2.column3 IS NULL)
WHERE
T1.id < T2.id -- Only display relationships in one way (<)
这不是组操作(如您的标题所示),它是记录之间的联接。