Sql server 子查询不同字段
您好,我正在学习编写sql查询,我正在尝试查询分类账表以选择一个字段“ENCID”,其中每个不同的ENCID在单独的文件“TDATE”中有4个以上的不同值。 然后按第三个字段“ITEMTYPE”进行筛选 这就是我所拥有的:Sql server 子查询不同字段,sql-server,subquery,Sql Server,Subquery,您好,我正在学习编写sql查询,我正在尝试查询分类账表以选择一个字段“ENCID”,其中每个不同的ENCID在单独的文件“TDATE”中有4个以上的不同值。 然后按第三个字段“ITEMTYPE”进行筛选 这就是我所拥有的: SELECT [ENCID] ,[PATIENTID] ,[ITEMTYPE] ,[Service Date] ,[Transaction Date] ,[Trans] ,[Practice
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(使用多个条件等,,,,),其条件仅在计算聚合后应用,而不是在计算聚合前应用。