2012-10-20 3 views
0

내가SQL 합계

쿼리 조건에 numitemsignoreditems을 기반으로 여기에 두 테이블 주문 및 oitems 테이블을 요약 한 지금

select catalogid 
    , sum(numitems) numitems 
    , sum(allitems) - sum(numitems) ignoreditems 
from 
(
    select i.catalogid 
     , case 
      when (ocardtype in ('PayPal','Sofort') OR 
        ocardtype in ('mastercard','visa') and 
        odate is not null) 
       AND NOT EXISTS 
       (
       select * 
       FROM bookedordersids b 
       where b.booked = o.orderid 
      ) 
      then numitems 
      else 0 
     end AS numitems 
     , numitems AS allitems 
    from orders AS o 
    join oitems AS i on i.orderid = o.orderid 
) AS X 
group by catalogid 

다음 SQL 쿼리를 가지고 당신은

내가 FOLLO를 추가 할, 내가 컬럼의 값이 oitems 테이블에 oprocessed0이다라고만을 합계를 찾으려면 지금 무엇을 참조하십시오 X

where oprocessed=0 

또는 내가 SELECT CASE에 조건을 추가해야합니다 전에 날개?

+0

"이제 합계 만 찾고 싶다면 ...". 체크하고 싶다면, 무시하고있는 항목을 구성하는 합계, 무시되는 것에 영향을주는 numitem을 나타내는 합계 또는 다른 숫자/결과를 참조하십시오. – JohnLBevan

+0

oprocessed가 0 일 때 두 합계에서 무시하고 싶습니다. – user1570048

+0

allitems의 값도 영향을 받으시겠습니까? – JohnLBevan

답변

1

카탈로그 ID는 oitems 테이블에서오고있다 - 를 추가하는 카탈로그 번호는 결과에 포함되지 않습니다 것을 의미 = 0 을 oprocessed 곳.

내 생각에 당신은 당신의 케이스 성명서에서 이것을 원할 것입니다. 그러나 이것에 대한 확실한 확신은 확실하지 않습니다.

select catalogid 
, sum(numitems) numitems 
, sum(allitems) - sum(numitems) ignoreditems 
from 
(
    select i.catalogid 
    , numitems allitems 
    , case 
     when --if the money for the order is gaurenteed return the number of items bought 
     (
      ocardtype in ('PayPal','Sofort') 
      OR 
      (
       ocardtype in ('mastercard','visa') 
       and 
       odate is not null 
      ) 
     ) 
     AND NOT EXISTS 
     (
      select top 1 1 
      FROM bookedordersids b 
      where b.booked = o.orderid 
     ) 
     and i.oprocessed = 0 
     then numitems 
     else 0 --if payment isn't made/gaurenteed 0 items bought 
    end numitems 
    from orders o 
    inner join oitems i 
    on i.orderid = o.orderid 
) X 
group by catalogid