簡體   English   中英

T-SQL SUM全部帶條件計數

[英]T-SQL SUM All with a Conditional COUNT

我有一個查詢,產生以下內容:

Team  | Member  |  Cancelled | Rate
-----------------------------------
  1     John         FALSE      150
  1     Bill         TRUE        10
  2     Sarah        FALSE      145
  2     James        FALSE      110
  2     Ashley       TRUE         0

我需要為被取消的團隊選擇虛假的成員數,以及不考慮被取消狀態的費率之和……如下所示:

SELECT
    Team,
    COUNT(Member),    --WHERE Cancelled = FALSE
    SUM(Rate)         --All Rows
FROM
    [QUERY]
GROUP BY
    Team

因此結果將如下所示:

Team  |  CountOfMember | SumOfRate
----------------------------------
  1           1                160
  2           2                255

這只是一個例子。 實際查詢具有多個復雜的聯接。 我知道我可以對比率的總和進行一個查詢,然后對計數進行另一個查詢,然后將這兩個結果結合在一起,但是有沒有一種更簡單的方法,它可以減少稅費並且不會導致我復制並粘貼已經復雜的查詢?

您需要一個有條件的總和,如下所示:

sum(case when cancelled = 'false' then 1 else 0 end)

使用sum()的原因。 sum()正在處理記錄,並為每個記錄添加一個值為01的值。 該值取決於cancelled的值。 如果為假,則sum()增加1計算此類值的數量。

您可以使用count()做類似的事情,像這樣:

count(case when cancelled = 'false' then cancelled end)

這里的竅門是count()計算非NULL值的數量。 then子句可以是非NULL的任何內容cancelled ,常量1或其他字段。 如果沒有其他值,則任何其他值都將變為NULL並且不計數。

我一直都喜歡sum()版本勝過count()版本,因為我認為它更明確。 在其他SQL方言中,有時可以將其縮短為:

sum(cancelled = 'false')

一旦習慣了,這很有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM