2015-02-23 66 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