2012-07-02 77 views
0

我希望得到一些幫助,我的SQL Server腳本。以任意順序比較基於多列的兩個表?

基本上,我有以下要求: 在數據庫中我們有一個名爲空間的表。空間有長度和寬度。 我們需要從我們收到的excel表單上傳數據。所以我把它上傳到一個表格中,這張表格也有一個長度和寬度。現在,我需要從空間(OID,長度,寬度)的OID到#spaceTmp表(NULL,長度,寬度),但問題是長度和寬度可以按任何順序匹配。

例: 空間表有以下: (1,5,7)

#spaceTmp具有以下: (NULL,5,7) (NULL,7,5) (NULL ,4,3) (NULL,3,4)

我需要#spaceTmp有: (1,5,7) (1,7,5) (2,4,3) ( 2,3,4)

任何建議將被認真考慮。

P.S.爲簡單起見,我沒有使用GUID,但整數OID列

+0

你在哪裏得到的值2行'(2,4,3)(2,3,4)'? – Chandu

+0

對不起,通常我需要爲任何不存在的空間創建NEWID(),但爲了簡單起見,假設NEWID()將爲此表生成一個唯一的整數 – mlnyc

回答

0

試試這個:

/* 
-- Setup Script 
SELECT NEWID() OID, 5 Width, 7 Length 
    INTO #Space 



SELECT NEWID() OID, 5 Width, 7 Length 
    INTO #SpaceTemp 

INSERT INTO #SpaceTemp 
SELECT NULL OID, 5 Width, 7 Length 

INSERT INTO #SpaceTemp 
SELECT NULL OID, 7 Width, 5 Length 


INSERT INTO #SpaceTemp 
SELECT NULL OID, 4 Width, 3 Length 

INSERT INTO #SpaceTemp 
SELECT NULL OID, 3 Width, 4 Length 

UPDATE #SpaceTemp SET OId = NULL; 
*/ 
UPDATE a 
     SET a.OId = COALESCE(b.OId, NEWID()) 
    FROM #SpaceTemp a LEFT JOIN #Space b 
     ON (a.Width = b.Width AND a.Length = b.Length) 
     OR (a.Width = b.Length AND a.Length = b.Width) 




SELECT * FROM #SpaceTemp 
1

這樣的事情?

UPDATE #spaceTemp SET Old = ID 
FROM Space 
WHERE (Space.Width = #spaceTemp.Width AND Space.Length = #spaceTemp.Length) 
OR (Space.Width = #spaceTemp.Length AND Space.Length = #spaceTemp.Width)