2017-05-31 147 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,它也會給出不同的行集。請檢查 –