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”附加到列名以与实际表列名分开,因为当我使用内部联接时会出现一些歧义错误。

4

1 回答 1

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;
于 2013-07-03T19:01:52.277 回答