我收到了这个错误:
ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP或FOR XML
来自此查询:
(SELECT Z.dMonth,Z.dCount FROM (
SELECT COUNT(*) dCount, month(tblDiving.date_of_diving) as dMonth
FROM tblDiving
GROUP BY month(tblDiving.date_of_diving)
)Z
ORDER BY Z.dCount)
我理解我需要在此查询的某处添加“Top”,但在哪里? 最后,此查询需要返回最大dCount和此dCount的月份。
编辑:
This is my query:
select tblSite.name,tblSite.site_length,tblSite.site_depth,tblSite.water_type,tblSite.country,
COUNT(distinct tblDivingClub.number) as number_of_clubs,
COUNT(distinct tblDiving.diving_number) as number_of_divings,
COUNT(distinct tblDiving.guide) as number_of_guids,
sum(tblDiving.number_of_divers) as number_of_divers,
(SELECT top 1 Z.dMonth,Z.dCount FROM (
SELECT COUNT(*) dCount, month(tblDiving.date_of_diving) as dMonth
FROM tblDiving
GROUP BY month(tblDiving.date_of_diving)
)Z
ORDER BY Z.dCount)
from tblCountry inner join
tblSite on tblCountry.name=tblSite.country
inner join tblDiving on tblSite.name = tblDiving.diving_site
inner join tblDivingClub on tblDiving.diving_club = tblDivingClub.number
where tblSite.name in(select tblSite.name from tblSite where tblSite.country = 'Greece' ) and
tblDiving.date_of_diving >= DATEADD(year,-1, GETDATE())
group by tblSite.name,tblSite.site_length,tblSite.site_depth,tblSite.water_type,tblSite.country
现在错误是:当EXISTS没有引入子查询时,只能在选择列表中指定一个表达式
答案 0 :(得分:1)
我认为这应该有用
SELECT Z.dMonth
,Z.dCount
FROM (
SELECT COUNT(*) dCount
,month(tblDiving.date_of_diving) AS dMonth
FROM tblDiving
GROUP BY month(tblDiving.date_of_diving)
HAVING COUNT(*) = (
SELECT MAX(A.Count)
FROM (
SELECT COUNT(*) Count
,tblDiving.date_of_diving
FROM tblDiving
GROUP BY tblDiving.date_of_diving
) A
)
) Z
答案 1 :(得分:0)
为什么不这样做:
SELECT TOP(1) COUNT(*) AS dCount, MONTH(tblDiving.date_of_diving) AS dMonth
FROM tblDiving
GROUP BY MONTH(tblDiving.date_of_diving)
ORDER BY dCount
答案 2 :(得分:0)
Microsoft在此解释 - http://support.microsoft.com/kb/841845
来自文档 -
“在视图,内联函数,派生表或子查询中使用ORDER BY子句时,它不保证有序输出。而是,ORDER BY子句仅用于保证结果集由Top运算符生成的具有一致的组成.Order BY子句仅在最外层的SELECT语句中指定时保证有序的结果集。“
在您的情况下,如果您想要退回所有内容,可以选择前100%,如果您需要,则可以选择前1名。
(SELECT TOP 1 Z.dMonth,Z.dCount FROM (
SELECT COUNT(*) dCount, month(tblDiving.date_of_diving) as dMonth
FROM tblDiving
GROUP BY month(tblDiving.date_of_diving)
)Z
ORDER BY Z.dCount)