sql跟踪更改的值

sql跟踪更改的值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图找出用户改变最多的价值观。 我有这样一个用户表: 这是一个用户表,其中的条目不会更改。如果用户更改了某些内容,它将创建一个新记录来跟踪用户更改的内容 现在我想得到这样的东西: 我希望列名称(电子邮件、电话等)作为值,以便我可以排序 有人知道我该怎么做吗 编辑:我正在使用SSMS和T-SQL,它看起来很可怕,但它可以工作: select * into #q1 from (SELECT Row_number()OVER(ORDER BY i.CreationDate) rn, i.Emai

我试图找出用户改变最多的价值观。 我有这样一个用户表:

这是一个用户表,其中的条目不会更改。如果用户更改了某些内容,它将创建一个新记录来跟踪用户更改的内容

现在我想得到这样的东西:

我希望列名称(电子邮件、电话等)作为值,以便我可以排序

有人知道我该怎么做吗


编辑:我正在使用SSMS和T-SQL,它看起来很可怕,但它可以工作:

select * into #q1 from (SELECT Row_number()OVER(ORDER BY i.CreationDate) rn, i.Email, i.Phone, i.Address, i.Phone, i.NumberOfKids
         FROM   user i) as t

SELECT Sum(CASE WHEN a.Email= b.Email THEN 0 ELSE 1 END) as Amount, 'Email' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.Address= b.Address THEN 0 ELSE 1 END) as Amount, 'Address' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.Phone= b.Phone THEN 0 ELSE 1 END) as Amount, 'Phone' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.NumberOfKids= b.NumberOfKids THEN 0 ELSE 1 END) as Amount, 'NumberOfKids' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
order by Amount desc
drop table #q1

我有一个用户表,每个用户一行,存储当前值。然后我会有一个触发器来记录更改(每次更改一行,存储新旧值)。@jarlh我不允许对数据库进行更改。@LucienRyter:SSMS不是“数据库”或“DBMS”。它是一个可以连接到SQLServer数据库以运行SQL语句的应用程序,它与数据库无关question@LucienRyter如果不启用,向表中添加触发器或使用系统版本表。更改跟踪非常轻量级,适用于所有版本和版本,可以返回自上次更改以来更改的ID或所有行。它对表和应用程序也是透明的。触发器需要添加额外的表等。只有在实际问题与您提出的问题不同时,系统版本的表才需要SQL Server 2016或更高版本。您根本不需要联合,只需要一个单独的自联接,一个检查其他字段是否已更改的
WHERE