2015-11-12 5 views
0

для запроса:разнице находки между записями в SQL

with cte as (
     select sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId, 
      count(*) over (partition by sp.edge) as cnt 
     from Budget sb join 
      Sap sp 
      on sb.Trace = sp.Trace 
     where sb.Trace in (select Trace from Sap where sb.UserId in ('R5', 'HB')) 
    ) 
select cte.* 
from cte 
where cnt > 1 
order by edge desc; 

После вывода генерируются:

case  trace  amount edge  userId     cnt 
110000061 40902752 357.00 21182786 HB      2 
110000061 40863651 161.00 21182786 R5      2 

Теперь мне нужно, чтобы отобразить только те случаи ВПР на разницу в количестве.

Для например: R5 количества пользователя количество-10 < = пользователь HB if (161<=[357-10]) т.е. затем отобразить случай Может кто-нибудь пожалуйста, дайте мне знать?

+0

код взят из: http://stackoverflow.com/questions/33663643/remove-distinct-records-from-sql-query-output – nikhilk

+0

Можете ли вы объяснить дальше? (161 <= [375-10]) Где вы получили 10 и что вы должны делать, если условие истинно? – CurseStacker

+0

10 - постоянное значение, и если условие истинно, мы должны отобразить соответствующий номер случая. Как и для вышеприведенного вывода, мы должны отображать 110000061 – nikhilk

ответ

0

Итак, вы уже знаете, что будете иметь дело с 2 конкретными пользователями?

Если да, то вы могли бы поставить эти результаты, которые вы размещены в временную таблицу, а затем присоединить его к себе ..... Так #tmp будет содержать ..

case  trace  amount edge  userId     cnt 
110000061 40902752 357.00 21182786 HB      2 
110000061 40863651 161.00 21182786 R5      2 

Тогда получите то, что вы хотите с помощью это ....

SELECT * FROM #TMP T1 
INNER JOIN #TEMP T2 ON T2.case = T1.case 
WHERE 
ABS(ABS(T1.amount) - ABS(T2.AMOUNT)) >= 10 --A difference of 10 or more 
Смежные вопросы