是否可以只获取SQL SERVER中具有不同值的列?只选择两行之间值不匹配的列
TABLE 1
id Name Desig
1 Ali Assistant.Manager
1 Ali Manager
2 John Manager
现在,如果我要查身份证1的状态,它应该返回名称(即Assistant.Manager &经理)
是否可以只获取SQL SERVER中具有不同值的列?只选择两行之间值不匹配的列
TABLE 1
id Name Desig
1 Ali Assistant.Manager
1 Ali Manager
2 John Manager
现在,如果我要查身份证1的状态,它应该返回名称(即Assistant.Manager &经理)
试试这个:
SELECT T1.Desig
FROM TableName T1 JOIN
(SELECT id,name
FROM TableName
GROUP BY id,name
HAVING COUNT(DISTINCT Desig) > 1) T2
ON T1.id=T2.id AND T1.name=T2.name
结果:
DESIG
Assistant.Manager
Manager
看到结果在SQL Fiddle。
在上面的例子中,我只使用了3列,但是如果表中有40列和50列,并且只更改了2,3列值。 有没有什么办法可以让我只能得到以前更改过的那些2,3列 – user2625113 2015-02-23 09:41:19
@ user2625113:不,您必须在查询中指定列名。 – 2015-02-23 09:47:59
如果id
是一个身份,你对此有何评论,你可以选择每名最新的行状:
select *
from (
select row_number() over (
partition by name
order by id desc) as rn
, *
) as SubQueryAlias
where rn = 1 -- Latest row per name
的数据库您使用的?这些指定是返回的,还是可以是随机的? – Andomar 2015-02-23 09:16:25
SQL Server 2008 R2 我只想要以前更改的列,而不是所有的列 – user2625113 2015-02-23 09:17:49
您如何确定“以前”?一个SQL表是一组无序的行,如果你没有要排序的列,没有办法确定哪一行是第一个 – Andomar 2015-02-23 09:20:20