比较SQL Server中的两个表

时间:2017-05-31 12:45:36

标签: sql sql-server

我在这种形式的SQL Server中有两个表:

enter image description here

我想在“名称”列中加入这两个表(两个表中都有重复项)。然后,我想比较“startNo”列的每一行,并检查table1.startNo> = table2.startNo是否如此,如果是,我想添加一个带有表2的UniqueRef的新列。

结果如上。

重要的是它检查table1.startNo> = table2.startNo表2中的每一行,这是我无法弄清楚的部分

3 个答案:

答案 0 :(得分:1)

你的问题不正确。

根据您的要求

  1. 按名称列加入
  2. 比较“startNo”列的每一行并检查table1.startNo> = table2.startNo
  3. 重要的是它检查table1.startNo> = table2.startNo表2中的每一行
  4. 您将第3行的输出表视为不正确。 注意:第一个表中aa3的StartNo是4,它大于第二个表中bb1或bb2的start no。 但你把结果作为bb3反对aa3< - 这是不正确的。

答案 1 :(得分:0)

对返回表2的TOP 1 UniqueRef的最后一列使用相关子选择表table1.startNo> = table2.startNo

答案 2 :(得分:0)

假设所有数字字段都是小数,这将为您提供所需的输出:

http://rextester.com/BYVC41019

CREATE TABLE Table1(UniqueRef VARCHAR(5), Name VARCHAR(10), startNo decimal(2, 1), endNo decimal(2, 1));
CREATE TABLE Table2(UniqueRef VARCHAR(5), Name VARCHAR(10), startNo decimal(2, 1), endNo decimal(2, 1));

INSERT INTO Table1(UniqueRef, Name, startNo, endNo)VALUES('aa1', 'name1', 1, 3);
INSERT INTO Table1(UniqueRef, Name, startNo, endNo)VALUES('aa2', 'name1', 2, 5);
INSERT INTO Table1(UniqueRef, Name, startNo, endNo)VALUES('aa3', 'name2', 5.5, 5);
INSERT INTO Table1(UniqueRef, Name, startNo, endNo)VALUES('aa4', 'name2', 1, 2);

INSERT INTO Table2(UniqueRef, Name, startNo, endNo)VALUES('bb1', 'name1', 2, 3);
INSERT INTO Table2(UniqueRef, Name, startNo, endNo)VALUES('bb2', 'name1', 3, 5);
INSERT INTO Table2(UniqueRef, Name, startNo, endNo)VALUES('bb3', 'name2', 5, 6);
INSERT INTO Table2(UniqueRef, Name, startNo, endNo)VALUES('bb4', 'name2', 6, 8);

SELECT
  T1.UniqueRef
, T1.Name
, T1.startNo
, T1.endNo
, T2.UniqueRef
FROM Table1 T1
LEFT JOIN Table2 T2             
              ON T1.Name = T2.Name
             AND T1.startNo >= T2.startNo