2012-10-20 29 views
0

有下面的SQL查詢SQL總和與在選擇情況的條件

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 

現在我已經2代表在這裏 訂單和oitems表

查詢求和numitemsignoreditems根據條件你看,如果我想找到只有當列的值稱爲oprocessedoitems0總和現在該怎麼辦,

做我添加弗洛翅之前X

where oprocessed=0 

或者我應該添加一個條件的SELECT CASE?

+0

「現在如果我想找到總和......」。要檢查,你指的是哪一個數 - 構成被忽略的項目的總和,numitems的總數(這會影響被忽略的),還是其他的數字/結果? – JohnLBevan

+0

當oprocessed是0我想要忽略它在這兩個總和 – user1570048

+0

你想所有的價值也受到影響? – JohnLBevan

回答

1

您的目錄編號來自oitems表 - 添加 其中oprocessed = 0 意味着這些目錄編號不包含在您的結果中。

我的猜測是你想在你的病例陳述中這樣做 - 但我並不完全確定這背後的規範,所以不能肯定地說。

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