2017-05-31 110 views
0

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

enter image description here

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

结果如上。

重要的是,它会检查table1.startNo> = table2.startNo用于表2中的每一行,即我不能找出

+0

请编辑您的帖子,包括样本数据为*以及格式化文本*。通过这种方式可以更轻松地使用数据并重新创建用于测试目的的表。 –

+0

你可以连接这两个表和用例来确定你的UniqueRef列的结果。虽然我没有得到bb1如何在第二排结果。 –

+0

@piyushpankaj @piyushpankaj作为连接将匹配在“名称”列上它将匹配的前两个,它应该然后作为2> = 2它引入uniqueRef bb1 – user33484

回答

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 
0

使用该返回TOP 1的最后一列的相关子选择部分Table2的UniqueRef WHERE the table1.startNo> = table2.startNo

1

你的问题是不正确的。

根据您的要求

  1. 按名称列
  2. 加入比较“startNo”列中的每一行,并检查是否table1.startNo> = table2.startNo
  3. 重要的是,它会检查表1。 startNo> = table2.startNo表2中的每一行

您给出的第3行的输出表为错误的。 注:第一个表中aa3的StartNo为4,大于第二个表中bb1或bb2的开始号。 但是,您给出的结果为bb3针对aa3 < - 这是不正确的。

+0

现在你编辑了帖子。抱歉编辑后发布。 –

+1

我认为@Jake提供的答案会输出问题中提供的结果表。但是,如上所述,它不符合要求3。 要求3 - >重要的是,它检查table1.startNo> = table2.startNo表2中的每一行 –

+0

如果我们将第一个表的aa1和aa2的startno改为3和6,它也会给出不同的行集。请检查 –