计数困难

问题描述 投票:1回答:2

我有一个遇到的表(相关的列名称:enc_id(guid)和enc_nbr(int))我有一张遭遇表(enc_id(guid))

我想生成一个enc_nbr的列表,其中相关的enc_id在10倍或更多的遭遇中显示。

我尝试过的:

select count(*) from encounters 
where enc_id in (select count(enc_id) from encounter_notes having count(enc_id)>9)

这将产生以下错误:

操作符类型冲突:uniqueidentifier与int不兼容

sql-server
2个回答
2
投票

您无法在guidnumber之间进行比较。

您也可以使用CTE实现它。

;WITH cte AS
  (SELECT enc_id,
          count(enc_id)
   FROM encounter_notes
   GROUP BY enc_id
   HAVING count(enc_id)>9)
SELECT *
FROM encounters e
INNER JOIN cte ON e.enc_id = cte.enc_id

1
投票

也许您正在寻找这样的东西:

SELECT 
    enc_id
    ,NumberOfOccurances = COUNT(*) 
FROM ENCOUNTERS
GROUP BY enc_id
HAVING COUNT(*) > 9

HAVING子句允许您在聚合函数上放置过滤器,而对于WHERE子句则不能。对于所有出现超过9次的enc_id值,此查询将返回每个enc_id及其发生的次数。

编辑:

如果只想运行代码,则可以将其更改为:

select count(*) 
from encounters 
where enc_id in (select enc_id from encounter_notes having count(enc_id)>9)

您的子查询应返回GUID集(enc_id),而不是不同值的数量。但这并不是很好的代码。如果可能的话,应该避免在WHERE子句中使用子查询,因为子查询最终将对外部查询中的每条记录执行。这需要很长时间。

© www.soinside.com 2019 - 2024. All rights reserved.