是否可以只獲取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