2012-03-06 89 views
0

如何在表中的单个列上使用TOP函数以及计数函数?SQL Server 2005中的TOP函数没有给出正确的答案

我得到这个查询只有一个计数,我有35个条目应该来。 这是我的查询

select top(1) room_no, count(room_no) from rooms 
+0

用'group by'试过? – Mat 2012-03-06 11:35:23

+1

发布样本数据来解释问题。 – danihp 2012-03-06 11:36:48

+1

通过使用“TOP(1)”,您可以请求:*给我**一个**顶行*,这正是您所得到的。另外:你没有'ORDER BY',所以排序是**没有定义** - 它可以是任何东西。 – 2012-03-06 11:38:11

回答

1

好像你想要的是以下几点:

select room_no,count(room_no) 
from rooms 
group by room_no 

顺便说一句,我不知道为什么会没有group by执行。应该抛出一个错误。

0

COUNT函数在TOP之后被评估。这就是为什么你只能得到一个伯爵。你想要的是这样的东西

SELECT TOP(1) dbo.Table.Column1, (SELECT COUNT(*) FROM dbo.Table) 
FROM dbo.Table 

也如上所述,你真的应该按东西排序。

编辑:这也适用于:

SELECT TOP(1) dbo.Table.Column1, COUNT(*) OVER() AS Total 
FROM dbo.Table 

似乎是更有效的,以及(仅适用于小数据集测试虽然)。

+0

select top(1)rd.room_no,count(distinct rd.room_no)available_d from room_details rd left join rooms r on rd.room_no = r.room_no where rd.room_status ='A'and rd.room_no not in (选择rd.room_no from room_details rd left join rooms r on rd.room_no = r.room_no where rd.room_status ='A' and((2012-08-03)> = r.check_in_date and(2012-08) -03)<= r.check_out_date) 或((2012-08-03)> = r.check_in_date 和(2012-08-03)<= r.check_out_date)和type ='delux')和type =' delux' Group By rd.room_no – 2012-03-06 11:54:19

+0

我已经使用了group by子句bt m没有得到正确的答案,,它只计算第一排顶部..应该是crrct查询,它用于检查房间的可用性并且指定第一可用房间 – 2012-03-06 11:56:11

+0

用“(来自room_details的选择计数(distinct room_no)”替换“count(distinct rd.room_no)”“。检查这是否给你你想要的。 – Umair 2012-03-06 12:03:18

相关问题