2014-09-04 2 views
0

내가 가진 테이블 같은복잡한 SQL 업데이트 쿼리

Ticker Sedol bbg identifier 
t1  w2 null  Ticker 
t2  w3 null  sedol 

identfier는 BBG는 시세 열 값 그리고 난 후가 작동해야 식별자 열에서 새 identidier을 삽입하는 경우 identifier.But을 sedol에 같은 업데이트됩니다 시세 인 경우 그것도. 예 식별자 열에 'occ'을 삽입하면 bbg 열이 occ 열 값으로 업데이트되어야합니다. 식별자 값을 삽입 한 후 occ 열을 추가합니다.

내가 좋아하는 OUPUT 원하는

...

Ticker Sedol bbg identifier 
t1  w2 t1  Ticker 
t2  w3 w3  sedol 

참고 : 쿼리

+0

무엇입니까? 하나 또는 두 개의 테이블이 있습니까? – Elias

+0

이것은 아마도 단일 테이블에 있어서는 안됩니다. –

답변

0

내가 동적 요구 알고 동적해야하지만, 이것은하지 않을 것이다?

UPDATE TableName 
SET bbg = CASE 
       WHEN identifier = 'Ticker' 
       THEN Ticker 
       WHEN identifier = 'Sedol' 
       THEN Sedol 
       WHEN identifier = 'occ' 
       THEN occ 
      END 

동적 버전 :

DECLARE @SQL AS VARCHAR(MAX) 
SET @SQL = 'UPDATE TableName 
      SET bbg = CASE ' + 
      STUFF 
      (
       (
        SELECT ' ' + 'WHEN identifier = ''' + c.name + ''' THEN ' + QUOTENAME(c.name) 
        FROM sys.columns c 
          JOIN sys.tables t 
           ON c.object_id = t.object_id 
        WHERE t.name = 'YourTableName' 
          AND c.name <> 'bbg' 
        FOR XML PATH('') 
       ), 
       1, 
       0, 
       '' 
      ) + ' END' 
EXEC (@SQL) 

그리고 내 경우 증명할 수있는 좋은 피들러 데모 ....

+0

IT는'bbg'이고'BBQ'는 아닙니다 ... 나는 무엇을 생각하고 있었습니까 ???? –

+0

감사합니다 ... 지금 작동 중입니다. – user3751161