2013-05-29 3 views
0

Имейте таблицу и нужно выводить только определенные строки. Вот пример:SQL для получения этих уникальных строк

Таблица:

ID Pacct Sacct 
---------------------- 
10 12 12 
9 13 12 
12 14 12 
4 15 16 
5 16 15 
6 17 18 
7 19 18 

Необходимо выбрать строки, где Pacct <> Sacct всякий раз, когда существует также строки, где Pacct = Sacct

Таким образом, для приведенных выше таблиц, выход I ищут:

ID PAcct Sacct 
-------------------------- 
9 13 12 
12 14 12 

Любые идеи о том, как это сделать? Большое спасибо!

+4

Я смущен. 'pacct <> sacct' AND' pacct = sacct' является противоречием – Kermit

+1

Он говорит, что хочет вернуть результат только в том случае, если есть строки, которые существуют во всей таблице, которые удовлетворяют pacct = sacct. Итак, 'SELECT * FROM table WHERE pacct <> sacct' только если' SELECT COUNT (*) FROM table WHERE pacct = sacct'> 0 – crush

+0

RDBMS - это SQL Server 2008. – user1967701

ответ

0

I Вы ищете что-то в этом направлении. Но я не уверен.

select * 
from Table1 
inner join 
    (select D, Pacct, Sacct 
    from Table1 
    where Pacct = Sacct) p_eq_s 
on Table1.Pacct = p_eq_s.Sacct 
or Table1.Pacct = p_eq_s.Pacct 
or Table1.Sacct = p_eq_s.Sacct 
or Table1.Sacct = p_eq_s.Pacct 
where Table1.Pacct <> Table1.Sacct 
0
SELECT t1.ID, t1.PAcct, t1.Sacct 
FROM MyTable t1 
INNER JOIN MyTable t2 
ON t2.ID <> t1.ID AND t2.PAcct = t1.PAcct 
WHERE t1.PAcct <> t1.Sacct 
AND t2.PAcct = t2.Sacct 

Пожалуйста, обратите внимание, что это зависит от PAcct и Sacct не будучи обнуляемыми (или настройка сервера SQL, по умолчанию относительно неопределенные сравнения равенства меняется). Если они имеют значение NULL, для этого необходимо изменить условие WHERE t1.PAcct <> t1.Sacct.

1

кажется, что вы хотите пары pacct и sacct где они разные, и где sacct в не в списке paccts где две такие же:

select * 
from t 
where pacct <> s.acct and 
     s.acct in (select t2.pacct from t t2 and t2.sacct = t2.pacct) 
+0

спасибо, что сработал !! – user1967701

0

Попробуйте

select * from table x1 
where Pacct <> Sacct 
and exists (select 1 from table x2 
      where x2.Pacct = x2.Sacct and 
        (x1.Pacct = x2.Pacct or 
        x1.Sacct = x2.Sacct))   

SQL DEMO

-1

вы должны попробовать что-то вроде:

SELECT * FROM dump WHERE (PAcct - Sacct = 0); 
+0

что это: O? –

Смежные вопросы