0

SQL Server スクリプトの助けを借りたいと思っていました。

基本的に、次の要件があります。データベースには Space というテーブルがあります。スペースには長さと幅があります。受け取った Excel シートからデータをアップロードする必要があります。テーブルにアップロードすると、このテーブルにも長さと幅があります。

ここで、Oid を Space (Oid、Length、Width) から #spaceTmp テーブル (NULL、Length、Width) に取得する必要がありますが、問題は、長さと幅が任意の順序で一致する可能性があることです。

例: スペース テーブルには次のものがあります: (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)

アドバイスをいただければ幸いです。

PS簡単にするために、Oid列にはGUIDではなく整数を使用しています

4

2 に答える 2

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)
于 2012-07-02T13:39:00.697 に答える
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
于 2012-07-02T13:58:09.630 に答える