使用相同的列连接Temp表和实际表

时间:2013-07-02 14:21:21

标签: sql-server

我有一个使用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 个答案:

答案 0 :(得分: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;