SQL HAVING子句未返回我期望的内容
我在SQL查询中遇到问题。有问题的查询如下所示: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
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。好的,谢谢你们。这使整个问题对我来说更清楚了。好的,谢谢你们。这使整个问题对我来说更清楚了一点。