Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 HAVING子句未返回我期望的内容_Sql_Sql Server_Sql Server 2008_Having - Fatal编程技术网

SQL HAVING子句未返回我期望的内容

SQL HAVING子句未返回我期望的内容,sql,sql-server,sql-server-2008,having,Sql,Sql Server,Sql Server 2008,Having,我在SQL查询中遇到问题。有问题的查询如下所示: SELECT TOP 3 r2.fdtmFilingPeriod FROM TBLRETURN r2 WHERE r2.fstrDocType = 'RT3001' AND r2.FLNGVER = 0 AND r2.fstrStatus in ('RCVD', 'SUS') --AND r2.flngAccountKey = 669 --has one row in the

我在SQL查询中遇到问题。有问题的查询如下所示:

SELECT TOP 3 r2.fdtmFilingPeriod 
FROM  TBLRETURN r2
WHERE r2.fstrDocType       = 'RT3001' 
AND   r2.FLNGVER           = 0 
AND   r2.fstrStatus        in ('RCVD', 'SUS') 
--AND r2.flngAccountKey    = 669 --has one row in the table     -- should return 0 rows
AND   r2.FLNGACCOUNTKEY    = 265   --has several rows the table -- should return 3 rows
GROUP BY r2.fdtmFilingPeriod
--HAVING COUNT(r2.fdtmFilingPeriod) > 2
ORDER BY    r2.FDTMFILINGPERIOD DESC;
奇怪的是,当我取消注释HAVING子句时,我并没有完全得到数据库中的内容。运行上述查询时得到的结果如下:

2013-12-31 00:00:00.000
2013-09-30 00:00:00.000
2013-06-30 00:00:00.000
这显然不止两行,但是当我取消注释HAVING子句时,没有返回任何行。有人能帮我弄清楚这是怎么回事吗

我正在使用SQLServer2008


提前感谢。

拥有
就像是一个
WHERE
子句,但是在分组完成后,需要为分组聚合数据

你有:

HAVING COUNT(r2.fdtmFilingPeriod) > 2
首先,
COUNT(r2.fdtmFilingPeriod)
只是指在指定的分组中计算非空字段。那么在每个
fdtmFilingPeriod
的基础上,
计数是多少

在您提到的这些行中,计数为:

2013-12-31 00:00:00.000    1
2013-09-30 00:00:00.000    2
这两行都不会传递您的
HAVING
子句

此外,为了更容易地查看
拥有的
是如何决定的,只需更改查询以添加您正在筛选的
计数

SELECT TOP 3 r2.fdtmFilingPeriod, COUNT(r2.fdtmFilingPeriod) AS CNT
FROM  TBLRETURN r2
WHERE r2.fstrDocType       = 'RT3001' 
AND   r2.FLNGVER           = 0 
AND   r2.fstrStatus        in ('RCVD', 'SUS') 
--AND r2.flngAccountKey    = 669 --has one row in the table     -- should return 0 rows
AND   r2.FLNGACCOUNTKEY    = 265   --has several rows the table -- should return 3 rows
GROUP BY r2.fdtmFilingPeriod
--HAVING COUNT(r2.fdtmFilingPeriod) > 2
ORDER BY    r2.FDTMFILINGPERIOD DESC;

拥有
类似于一个
WHERE
子句,但是在分组完成后,它是关于分组的聚合数据的

你有:

HAVING COUNT(r2.fdtmFilingPeriod) > 2
首先,
COUNT(r2.fdtmFilingPeriod)
只是指在指定的分组中计算非空字段。那么在每个
fdtmFilingPeriod
的基础上,
计数是多少

在您提到的这些行中,计数为:

2013-12-31 00:00:00.000    1
2013-09-30 00:00:00.000    2
这两行都不会传递您的
HAVING
子句

此外,为了更容易地查看
拥有的
是如何决定的,只需更改查询以添加您正在筛选的
计数

SELECT TOP 3 r2.fdtmFilingPeriod, COUNT(r2.fdtmFilingPeriod) AS CNT
FROM  TBLRETURN r2
WHERE r2.fstrDocType       = 'RT3001' 
AND   r2.FLNGVER           = 0 
AND   r2.fstrStatus        in ('RCVD', 'SUS') 
--AND r2.flngAccountKey    = 669 --has one row in the table     -- should return 0 rows
AND   r2.FLNGACCOUNTKEY    = 265   --has several rows the table -- should return 3 rows
GROUP BY r2.fdtmFilingPeriod
--HAVING COUNT(r2.fdtmFilingPeriod) > 2
ORDER BY    r2.FDTMFILINGPERIOD DESC;

这两个日期的计数都不超过两行?12-31的计数为1,9-30的计数为2。这两个日期的计数都不超过两行?12-31是1,9-30是2。好的,谢谢你们。这使整个问题对我来说更清楚了。好的,谢谢你们。这使整个问题对我来说更清楚了一点。