¿Cómo comparo 2 filas de la misma tabla (SQL Server)?

Necesito crear un trabajo de background que procese una tabla buscando filas que coincidan en una identificación particular con diferentes estados. Almacenará los datos de fila en una cadena para comparar los datos contra una fila con una identificación coincidente.

Sé la syntax para get los datos de la fila, pero nunca he intentado comparar 2 filas de la misma tabla antes? ¿Cómo se hace? ¿Tendría que usar variables para almacenar los datos de cada uno? O de alguna otra manera?

(Usando SQL Server 2008)

Puedes unirte a una table tantas veces como necesites, se llama una auto unión .

Se asigna un alias a cada instancia de la tabla (como en el ejemplo a continuación) para diferenciar una de otra.

SELECT a.SelfJoinTableID FROM dbo.SelfJoinTable a INNER JOIN dbo.SelfJoinTable b ON a.SelfJoinTableID = b.SelfJoinTableID INNER JOIN dbo.SelfJoinTable c ON a.SelfJoinTableID = c.SelfJoinTableID WHERE a.Status = 'Status to filter a' AND b.Status = 'Status to filter b' AND c.Status = 'Status to filter c' 

OK, después de 2 años es finalmente el momento de corregir la syntax:

 SELECT t1.value, t2.value FROM MyTable t1 JOIN MyTable t2 ON t1.id = t2.id WHERE t1.id = @id AND t1.status = @status1 AND t2.status = @status2 

Algunas personas encuentran que la siguiente syntax alternativa es más fácil de ver lo que está sucediendo:

 select t1.value,t2.value from MyTable t1 inner join MyTable t2 on t1.id = t2.id where t1.id = @id 

SELECT COUNT(*) FROM (SELECT * FROM tbl WHERE id=1 UNION SELECT * FROM tbl WHERE id=2) a

Si tienes dos filas, son diferentes, si una: la misma.

 SELECT * FROM A AS b INNER JOIN A AS c ON ba = ca WHERE ba = 'some column value'