SQL查询按数据分组,但带有order by子句
我预订了有数据的桌子SQL查询按数据分组,但带有order by子句,sql,sql-server,Sql,Sql Server,我预订了有数据的桌子 GUEST_NO HOTEL_NO DATE_FROM DATE_TO ROOM_NO 1 1 2015-05-07 2015-05-08 103 1 1 2015-05-11 2015-05-12 104 1 1 2015-05-14 2015-05-15 103 1 1 201
GUEST_NO HOTEL_NO DATE_FROM DATE_TO ROOM_NO
1 1 2015-05-07 2015-05-08 103
1 1 2015-05-11 2015-05-12 104
1 1 2015-05-14 2015-05-15 103
1 1 2015-05-17 2015-05-20 101
2 2 2015-05-01 2015-05-02 204
2 2 2015-05-04 2015-05-05 203
2 2 2015-05-17 2015-05-22 202
我想要的是得到结果。
1)应将输出显示为客人号、酒店号、房间号和列,计数为前三列组合重复的次数
所以输出应该是这样的
GUEST_NO HOTEL_NO ROOM_NO Count
1 1 103 2
1 1 104 1
1 1 101 1
2 2 204 1
等等,但我希望结果以有序的方式显示,例如:输出应该是按bk.date\u排序到desc
我的查询如下,它显示我的计数,但如果我使用它不工作的顺序
select bk.guest_no, bk.hotel_no, bk.room_no,
count(bk.guest_no+bk.hotel_no+bk.room_no) as noOfTimesRoomBooked
from booking bk
group by bk.guest_no, bk.hotel_no, bk.room_no, bk.date_to
order by bk.date_to desc
所以添加order by result会显示出不同的结果,因为我将order by date_添加到列中,所以我必须添加此列也是group by子句,这将导致不同的结果,如下所示
GUEST_NO HOTEL_NO ROOM_NO Count
1 1 103 1
1 1 104 1
1 1 103 1
1 1 101 1
2 2 204 1
这不是我想要的输出。
我想要这四列,但按日期描述顺序排列到第列,并计算为前三列的重复次数您可以试试这个
select t.* from
(
select bk.guest_no, bk.hotel_no, bk.room_no, bk.date_to,
count(*) as noOfTimesBooked from booking bk
group by bk.guest_no, bk.hotel_no, bk.room_no, bk.date_to
) t
order by t.date_to
您还必须选择date_to,然后根据它对结果进行分组。
如果使用“group by”子句,SQL Server不允许使用“order by”。因此,您可以进行子查询,并在外部查询中使用“order by”
SELECT * FROM
(select bk.guest_no,bk.hotel_no,bk.room_no
,count(bk.guest_no+bk.hotel_no+bk.room_no) as noOfTimesRoomBooked,
(SELECT MAX(date_to) FROM booking CK
WHERE CK.guest_no=BK.guest_no AND bk.hotel_no=CK.bk.hotel_no
bk.room_no=CK.ROOM_NO ) AS DATEBOOK
from booking bk
group by bk.guest_no,bk.hotel_no,bk.room_no,bk.date_to) A
ORDER BY DATEBOOK
这可能会对您有所帮助我认为一个很好的方法是按客人号、酒店号和房间号进行分组,并按每组的最大(即最近)预订日期进行排序
SELECT
guest_no,
hotel_no,
room_no,
COUNT(1) AS BookingCount
FROM
booking
GROUP BY
guest_no,
hotel_no,
room_no
ORDER BY
MAX(date_to) DESC;
也许这就是你要找的
select
guest_no,
hotel_no,
room_no,
count(*) as Count
from
booking
group by
guest_no,
hotel_no,
room_no
order by
min(date_to) desc
或者可能是max()而不是min()。SQL FIDLE:您的意思是,您在没有order BY的情况下得到了正确的结果(订单除外),但是当您添加order BY时,您会得到另一个结果吗?还是仅仅是“不起作用”的命令?请在没有订单和有订单的情况下显示结果。此外,您还可以将bk.date_添加到选择列表中,以使事情更清楚。您在编写“如果使用'group by'子句,SQL不允许…”时是指SQL Server吗?@jarlh Yes。如果在同一查询库中同时使用“分组依据”和“订单依据”进行澄清,则会出现错误!