2013-07-02 21 views
1

我使用PIVOT生成的臨時表(因此,這將是具有列的動態數)。而我有一個名爲dbo.User加入臨時表和實際表相同的列

我的臨時表是一個SQL表從審計表生成。這將與dbo.User表具有相同的列名稱。所以現在我必須選擇當兩個表中存在相同的列時,我必須從temp中選擇值而不是User表。我不認爲這是一個簡單的別名方法加入。請建議我。

在此先感謝..

代碼:

@cols給我從審計表中的列名(這是關係到用戶表)我不知道列在此數,動態數列

set @query = 'SELECT DISTINCT *, ' + @cols + ' 
        FROM 
       (
        select 
         e.USER_KEY, 
         e.FIELD_NAME+''_AUDIT'' AS FIELD_NAME_AUDIT, 
         e.PREVIOUS_DATA as DATA 
         FROM temp e 
       ) x 
       pivot 
       (
        max(DATA) 
        for FIELD_NAME_AUDIT in (' + @cols + ') 
       ) p 
       INNER JOIN USER xyz ON xyz.USER_KEY = p.USER_KEY' 

     EXEC sp_executesql @query; 

我已經附加「_AUDIT」列名作爲從實際的表列名分開,因爲當我使用內部連接存在一些模糊的錯誤。

+1

你有一個示例查詢,你已經嘗試過,並沒有工作? – maksimov

回答

0

我不知道,如果任何機構明白我的問題,但這裏是我的解決方案: 我用另一個臨時表來獲取所有從tbl_user列和使用 @cols刪除列,他們內部聯接兩個臨時表:

SELECT * INTO #TempTable FROM USER where USER_KEY= @User_key 

set @query = ' 
        ALTER TABLE #TempTable DROP COLUMN ' + @cols + ' 
        SELECT DISTINCT p.*, xyz.* 
        FROM 
       (
        select 
         e.USER_KEY, 
         e.FIELD_NAME, 
         e.PREVIOUS_DATA as DATA 
         FROM temp e 
       ) x 
       pivot 
       (
        max(DATA) 
        for FIELD_NAME_AUDIT in (' + @cols + ') 
       ) p 
       INNER JOIN USER xyz ON xyz.USER_KEY = p.USER_KEY' 

     EXEC sp_executesql @query;