2009-07-20 6 views
0

J'ai besoin d'une requête qui peut effectuer l'opération suivante. J'ai une table avec 2 colonnesServeur SQL: Comparer les lignes

ID Values 
1 1 
1 2 
1 3 
1 4 
2 2 
2 5 
2 6 

si vous voyez pour ID1 je 1,2,3 et 4 en tant que valeurs et ID 2 je 2, 5 et 6.

Je veux à écrire une requête qui renvoie le texte suivant

1 (-) 4 (-) 5 (+) 6 (+)

signifie 1 et 4 sont supprimés et 5 et 6 sont ajoutés en comparant la deux ids.

Est-ce possible? S'il vous plaît laissez-moi savoir

Merci

+0

Merci pour le rapide :-) Reponse –

Répondre

0

Cela vous donnera 1 & 4:

select a.values 
from my_table a 
where not exists (
select * from my_table b where b.values = a.values and b.ID = 2) 
and a.ID = 1 

et cela vous donnera 5 & 6:

select a.values 
from my_table a 
where not exists (
select * from my_table b where b.values = a.values and b.ID = 1) 
and a.ID = 2 
0

Quelque chose comme:

(
SELECT T.Value FROM dbo.Table T WHERE T.ID = 1 
EXCEPT 
SELECT T.Value FROM dbo.Table T WHERE T.ID = 2 
) 
UNION 
(
SELECT T.Value FROM dbo.Table T WHERE T.ID = 2 
EXCEPT 
SELECT T.Value FROM dbo.Table T WHERE T.ID = 1 
) 

que vous obtiendrez la liste des valeurs qui sont associées à 1 mais pas 2 et 2 mais pas 1. Vous pouvez facilement multiplier les valeurs d'une de ces sous-requêtes par -1 pour les différencier ou les exécuter comme deux requêtes distinctes.

Questions connexes