计算计数查询的结果 - SQL Server

时间:2015-05-04 17:53:18

标签: sql-server

我需要计算一次计数查询的结果。我的任务是计算有违规的检查数量(通过率= 0),然后将结果计入4个类别(检查有1个违规,检查有2个违规,检查有3个或更多违规)。这将要求联盟是,但我只想让第一个运行4个查询。这是我到目前为止所拥有的......

Select Count(I.ID),I.PermitID,I.Permit#
From InspectionItems I
Where I.PermitID in
   (Select SI.PermitID,Count(SI.ID) From InspectionItems SI
   Where SI.Passed <> 1
   And SI.Deleted <> 1
   Group By SI.PermitID
   Having Count(SI.ID) = 1)

Group By I.PermitID,I.Permit#
Order By I.PermitID,I.Permit#
  • ID - 主键
  • PermitID - Forigen Key
  • Permit# - 用户Frienly标签

我收到此错误...

  

当选择列表中只能指定一个表达式时   子查询不是用EXISTS引入的。

4 个答案:

答案 0 :(得分:0)

从子查询的选择列表中删除COUNT()。你只需要在HAVING子句中使用它:

upload.parseRequest()

答案 1 :(得分:0)

您的子查询返回PermitID和Count,这就是您收到错误的原因。它需要返回一列值,以便用作“in”或用于=,!=等的单个值的一部分。

首先执行违规计数可能最简单,然后将它们放入临时表中,然后从该表中计数。

答案 2 :(得分:0)

另一种可能的方法是使用CTE:

;WITH SI AS (
   Select SI.PermitID
   From InspectionItems SI
   Where SI.Passed <> 1
      And SI.Deleted <> 1
   Group By SI.PermitID
   Having Count(SI.ID) = 1
)

Select Count(I.ID), I.PermitID, I.Permit#
From InspectionItems I
INNER JOIN SI
   ON I.PermitID = SI.PermitID
Group By I.PermitID,I.Permit#
Order By I.PermitID,I.Permit#

你可以在一个中完成所有查询,而不是使用UNION

;WITH SI AS (
   Select SI.PermitID, Count(SI.ID) CountID
   From InspectionItems SI
   Where SI.Passed <> 1
      And SI.Deleted <> 1
   Group By SI.PermitID
)

Select Count(I.ID), I.PermitID, I.Permit#, SI.CountID
From InspectionItems I
INNER JOIN SI
   ON I.PermitID = SI.PermitID
Group By I.PermitID,I.Permit#
Order By I.PermitID,I.Permit#

答案 3 :(得分:0)

使用Tab Alleman建议我得到了运行的查询,但问题是我还试图从InspectionItems表中计算并且数字没有聚合。所以我使用了主要的Inspections表,它似乎已经分叉......

Select Count(I.InspectionID)
From Inspections I
Where I.PermitID in
   (Select SI.PermitID
   From InspectionItems SI
   Where SI.Passed <> 1
   And SI.Deleted <> 1
   Group By SI.PermitID
   Having Count(SI.ID) = 1)

感谢您的帮助。