SQL Server计数列未包含在聚合函数

时间:2015-12-18 16:01:28

标签: sql-server count

我在为SQL Server创建正确的查询时遇到了相当大的问题。首先,这是我要查询的数据。

TicketBookNum | TicketNum | Used | DateIssued | UnitID
---------------------------------------------
1234          |   25      |  Yes | Dec 18 2015 | 101
----------------------------------------------     
1234          |   26      |  Yes | Dec 18 2015 | 101
----------------------------------------------         
1234          |   27      |  Yes | Dec 18 2015 | 101
----------------------------------------------     
1234          |   28      |  No  | Dec 18 2015 | 101
----------------------------------------------     
1235          |   70      |  Yes | Dec 10 2015 | 102   
----------------------------------------------     
1235          |   71      |  Yes | Dec 10 2015 | 102    
----------------------------------------------        
1235          |   72      |  No  | Dec 10 2015 | 102    
----------------------------------------------       
1235          |   73      |  No  | Dec 10 2015 | 102   
----------------------------------------------     

所以我要查询这些数据以放入列表视图。 TicketBookNum和TicketNum是主键组合。我用来检索数据的查询是一个搜索功能,它是这样的:

create procedure [dbo].[SearchTicketBooks]
@TicketBookNumber   nvarchar(10) = null,
@DateIssuedA        datetime = null,
@DateIssuedB        datetime = null,
@UnitID         nvarchar(10) = null
as
select distinct(TicketBookNum), DateIssued, U.UnitID, COUNT(Used) as 'Completed' --Error on this COUNT because there is no aggregate function
   from TicketBooks TB
    full outer join Units U
    on TB.UnitID=U.UnitID
where TicketBookNum = 
    (case when @TicketBookNumber is null or @TicketBookNumber = '' then TicketBookNum else @TicketBookNumber end)
and TB.UnitID = 
    (case when @UnitID is null or @UnitID = '' then TB.UnitID else @UnitID end)
and DateIssued = 
    (case when (@DateIssuedA is null and @DateIssuedB is null) or (@DateIssuedA = '' and @DateIssuedB = '') or 
     @DateIssuedB = @DateIssuedA or DateIssued between @DateIssuedA and @DateIssuedB then DateIssued else @DateIssuedA end)
order by DateIssued desc    
go

因此,此查询的作用是让用户通过选择日期范围,单位或搜索直接票证编号来搜索故障单。如果在此搜索条件中未选择任何内容,则返回所有值。

我正在尝试返回已使用的列的计数,它等于是,并且仅针对该票证簿。因此,没有搜索条件的期望结果将是:

TicketBookNum | DateIssued | UnitID | Completed
-----------------------------------------------
1234          | Dec 18 2015| 101    |  3
1235          | Dec 10 2015| 102    |  2

我一直在研究这个问题已经有一段时间了,我无法弄明白。希望我已经提供了足够的信息,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

将此用于Completed列,GROUP BY其他列:

SUM(CASE Used WHEN 'Yes' THEN 1 ELSE 0 END) AS Completed