Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在sql server中,当值等于或为空时对行进行分组_Sql Server - Fatal编程技术网

Sql server 在sql server中,当值等于或为空时对行进行分组

Sql server 在sql server中,当值等于或为空时对行进行分组,sql-server,Sql Server,在SQLServer中,我尝试按ID对匹配的行进行分组 Null被视为通配符 说明:匹配行是什么意思? 匹配行意味着——只要两行的所有列都匹配 匹配列平均值–每个值的相同值('A'='A')或空值('A'/'B'/'C'/…=空) 在我的示例中: 第1行与第2行匹配- 因为: 第一列:'A'='A' 第二列:“B”=NULL 第三列:NULL='C' 第1行与第4行不匹配: 第一列:'A'='A' 第二列:“B”!='D' 第三列:NULL=NULL 比较失败,因为第二列中的值不匹配 有人能帮我

在SQLServer中,我尝试按ID对匹配的行进行分组

Null被视为通配符

说明:匹配行是什么意思?

匹配行意味着——只要两行的所有列都匹配

匹配列平均值–每个值的相同值('A'='A')或空值('A'/'B'/'C'/…=空)

在我的示例中:

第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}

表格中的预期结果示例:


当任一值为
NULL
时,您需要跳过特定的列联接条件,因此只需使用一些
为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 (<)
选择
T1.id,
T2.id
从…起
测试表为T1
内部连接测试_表为T2 ON
(T1.column1=T2.column1或T1.column1为NULL或T2.column1为NULL)以及
(T1.column2=T2.column2或T1.column2为NULL或T2.column2为NULL)以及
(T1.column3=T2.column3或T1.column3为空或T2.column3为空)
哪里

T1.id