3

私が探しているのは、Transact-SQL または SSIS 内から単一の行として表示されるデータの複数の行をマージすることです。たとえば、次のようになります。

作る:

REF  ID   Title Surname     Forename    DOB          Add1            Postcode
------------------------------------------------------------------------------------------    
D    10   MR    KINGSTON    NULL        15/07/1975   3 WATER SQUARE  NULL
T    10   NULL  NULL        BOB         NULL         NULL            NULL
T    10   MRS   NULL        NULL        NULL         NULL            TW13 7DT

これに:

REF  ID   Title Surname    Forename   DOB          Add1            Postcode
----------------------------------------------------------------------------------    
D    10   MRS   KINGSTON   BOB        15/07/1975   3 WATER SQUARE  TW13 7DT

だから私がやったことは、値を一緒にマージして、null の値を無視することです。(D = データ、T = 更新)

どんな提案でも大歓迎です。

ありがとう。

4

3 に答える 3

0

カーソルでそれを試すことができます:

BEGIN
  declare @Title sometype, @Surname sometype, @Forename sometype, @DOB sometype, @Add1 sometype, @Postcode sometype --vars to fetch the crusor into
  declare @rTitle sometype, @rSurname sometype, @rForename sometype, @rDOB sometype, @rAdd1 sometype, @rPostcode sometype --vars to keep the result

  DECLARE mycur CURSOR FOR  
    SELECT Title,Surname,Forename,DOB,Add1,Postcode
      FROM t1
      WHERE where id = 10 --or some parameter if you have a procedure
      ORDER BY REF -- add another column here if you decide to create one (e.g. date_created)

  OPEN mycur   
  FETCH NEXT FROM mycur INTO @Title, @Surname, @Forename, @DOB, @Add1, @Postcode 

  WHILE @@FETCH_STATUS = 0   
  BEGIN   
    SET @rTitle = isnull(@Title,@rTitle) -- update the result with the new value unless the new one is null
    ... -- repeat for all the variables
  END   

  CLOSE mycur
  DEALLOCATE mycur

--here use all the result variables for whatever you wish
END

ORDER BY REF基本的に T > D であるため、更新はデータの後に行われます

于 2013-06-25T11:49:53.033 に答える