子查询不同的字段

时间:2018-01-18 17:40:37

标签: sql-server subquery

您好我正在学习编写SQL查询,我正在尝试查询分类帐表以选择字段“ENCID”,其中每个不同的ENCID在单独的文件“TDATE”中有超过4个不同的值。 然后按第3个字段“ITEMTYPE”过滤

这就是我所拥有的:

SELECT 
      [ENCID]
      ,[PATIENTID]
      ,[ITEMTYPE]
      ,[Service Date]
      ,[Transaction Date]
      ,[Trans]
      ,[PracticeName]

  FROM TABLE1
WHERE ITEMTYPE = 'S'
AND ENCID IN (SELECT ENCID FROM TABLE1 WHERE Count(Distinct [Transaction Date]) >4 
AND ITEMTYPE = 'S')

我收到此错误“DataSource.Error:Microsoft SQL:聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。“

1 个答案:

答案 0 :(得分:1)

请改为尝试:

SELECT 
      [ENCID]
      ,[PATIENTID]
      ,[ITEMTYPE]
      ,[Service Date]
      ,[Transaction Date]
      ,[Trans]
      ,[PracticeName]    
FROM TABLE1
WHERE ITEMTYPE = 'S'
   AND ENCID IN (
      SELECT ENCID 
      FROM TABLE1 
      WHERE ITEMTYPE = 'S'
      GROUP BY ENCID
      HAVING Count(Distinct [Transaction Date]) >4 
         AND MAX ([Transaction Date]) - MIN ([Transaction Date]) > 60
     )

通常,聚合函数只能在SELECTHAVINGORDER BY子句中使用(因为WHERE确切地确定正在聚合哪些记录)。

错误消息令人惊讶地详述的是WHERE可能包含聚合函数的唯一情况。比如这个:

SELECT a.id
FROM a
GROUP BY a.id
HAVING a.id IN (
  SELECT b.a_id
  FROM b
  WHERE b.total = COUNT(a.something)
)