2013-02-05 26 views
3

我有2個表,我想最高但不超過修訂線表B中加入到表試圖加入一個表的最接近行到另一個表

表一:

REVISION_NO  INFO1 
1    a 
2    b 
3    c 
4    d 
5    e 
6    f 

表b:

REVISION_NO  INFO2 
1    x 
4    y 
6    z 

我想:

a    x 
b    x 
c    x 
d    y 
e    y 
f    z 

有些加盟專家知道如何做到這一點?如果它的事項,該數據庫是火鳥

回答

0

下面是SQL Server的一個可行的解決方案2008年

BEGIN 
DECLARE @a TABLE(REVISION_NO INT, INFO1 CHAR(1)) 
DECLARE @b TABLE(REVISION_NO INT, INFO2 CHAR(1)) 
INSERT INTO @a VALUES 
(1, 'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'e') 
INSERT INTO @b VALUES 
(1,'x'),(4,'y'),(6,'z') 
-- 
SELECT a.INFO1 
, ISNULL(b.INFO2, (
    SELECT INFO2 FROM @b WHERE REVISION_NO = (
     SELECT MAX(REVISION_NO) 
     FROM @b 
     WHERE REVISION_NO < a.REVISION_NO 
))) [INFO2] 
FROM @a a 
LEFT JOIN @b b 
    ON b.REVISION_NO = a.REVISION_NO 
END 

不知道火鳥將使這種下一查詢

+0

謝謝,即使我沒有完全理解「ISNULL」部分和「[INFO2]」,我仍然設法做你想要的解決方案。 – Nalmar

+0

@Nalmar - 括號[name]中的名稱只是輸出的列別名/標題。 ISNULL被使用,因爲我使用了一個LEFT JOIN,它將爲b列返回NULL值,如果它們是NULL,那麼我們使用內部查詢來查找適當的值。 –

-1

只是SQL:

select a.info01, b.info02 
    from a 
     inner join b on b.revision_no = (select max(revision_no) 
              from b 
             where revision_no <= a.revision_no) 

返回:

INFO01 INFO02 
====== ====== 
a  x 
b  x 
c  x 
d  y 
e  y 
f  z 
+0

這也可以,謝謝 – Nalmar

相關問題