簡體   English   中英

如何使用聚合函數過濾SQL語句中的行

[英]How to filter rows in SQL statement with aggregate function

我在SQL中創建了一個[Total Calls Made]列,但不知道如何訪問它。 我試圖只顯示[Total Calls]等於0的行,但是由於它實際上不是表的一部分,所以我不能僅添加一個子句, where [Total Calls Made] = 0where [Total Calls Made] = 0 我嘗試添加having count(distinct f.[id])=0 ,但是所做的只是使Total Call Made中的非0值變為Null。 這是為什么? 我只能選擇0行怎么辦?

SQL:

select 
    p.[ref] as [ID],
    p.[first] as [First],
    (select count(distinct f.[id]) 
     from [field] f 
     where (f.[related] = p.[id]) 
       and (f.[field] = 'person_that_called') 
     having count(distinct f.[id]) > 0) as [Total Calls Made]
from 
    [person] p 

結果:

ID     First   Total Calls Made
--- |  ----  | ----------------
011 |  Bob   |       4
012 |  Susan |       2
013 |  Joe   |      Null

預期結果:

ID     First   Total Calls Made
--- |  ----  | ----------------
013 |  Joe   |        0

使用聯接會使所有非0值都不顯示,這與我想要的相反。

SELECT p.[Ref] as [ID], p.[First] as [First], Count(f.[Field]) as CallsMade 
from [person] p 
left outer join [field] f on f.[Related] = p.[Ref] and f.[Field] = 'person_that_called'
group by p.[Ref], p.[First]
having Count(f.[Field]) =0

那是你的追求嗎?

嘗試使用CTE

WITH    cte
      AS (SELECT    p.[ref] AS [ID]
                   ,p.[first] AS [First]
                   ,(SELECT  COUNT(DISTINCT f.[id])
                            FROM    [field] f
                            WHERE   (f.[related] = p.[id])
                                    AND (f.[field] = 'person_that_called')
                            HAVING  COUNT(DISTINCT f.[id]) > 0
                           ) AS [Total Calls Made]
          FROM      [person] p
         )
SELECT  [ID]
       ,[First]
       ,ISNULL([Total Calls Made],0) as [Total Calls Made]
FROM    cte
WHERE   ISNULL(cte.[Total Calls Made],0) = 0

暫無
暫無

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

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