2015-02-23 65 views
1

是否可以只获取SQL SERVER中具有不同值的列?只选择两行之间值不匹配的列

TABLE 1 
id   Name      Desig 
1    Ali      Assistant.Manager 
1    Ali      Manager 
2    John      Manager 

现在,如果我要查身份证1的状态,它应该返回名称(即Assistant.Manager &经理)

+0

的数据库您使用的?这些指定是返回的,还是可以是随机的? – Andomar 2015-02-23 09:16:25

+0

SQL Server 2008 R2 我只想要以前更改的列,而不是所有的列 – user2625113 2015-02-23 09:17:49

+1

您如何确定“以前”?一个SQL表是一组无序的行,如果你没有要排序的列,没有办法确定哪一行是第一个 – Andomar 2015-02-23 09:20:20

回答

0

试试这个:

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

+0

在上面的例子中,我只使用了3列,但是如果表中有40列和50列,并且只更改了2,3列值。 有没有什么办法可以让我只能得到以前更改过的那些2,3列 – user2625113 2015-02-23 09:41:19

+0

@ user2625113:不,您必须在查询中指定列名。 – 2015-02-23 09:47:59

0

如果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