Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 子查询不同字段_Sql Server_Subquery - Fatal编程技术网

Sql server 子查询不同字段

Sql server 子查询不同字段,sql-server,subquery,Sql Server,Subquery,您好,我正在学习编写sql查询,我正在尝试查询分类账表以选择一个字段“ENCID”,其中每个不同的ENCID在单独的文件“TDATE”中有4个以上的不同值。 然后按第三个字段“ITEMTYPE”进行筛选 这就是我所拥有的: SELECT [ENCID] ,[PATIENTID] ,[ITEMTYPE] ,[Service Date] ,[Transaction Date] ,[Trans] ,[Practice

您好,我正在学习编写sql查询,我正在尝试查询分类账表以选择一个字段“ENCID”,其中每个不同的ENCID在单独的文件“TDATE”中有4个以上的不同值。 然后按第三个字段“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子句或select列表中包含的子查询中,并且被聚合的列是外部引用。”

请尝试以下操作:

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
     )
通常,聚合函数只能在
SELECT
HAVING
ORDER BY
子句中使用(因为其中确切地确定要聚合哪些记录)

错误消息令人惊讶地详细说明了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)
)

这是mysql还是MS SQL?请阅读错误消息。它表示您需要使用
HAVING
才能使用聚合函数。不能将
COUNT
放入
WHERE
子句中。这不是MySQL。请修改您的标记以进一步进行此操作,我将如何从上述结果中进行选择,ENCID的最大值([交易日期])-MIN([交易日期])>60?请参见编辑;您可以使用几乎相同的WHERE(使用多个条件等,,,,),其条件仅在计算聚合后应用,而不是在计算聚合前应用。