SQL Group by One Field优先于另一个

时间:2017-03-17 20:14:44

标签: sql sql-server

我有一张表格,列出了有关客户预订的信息。我需要将住在同一房间的客户分组在一起(通过具有相同的sharer_code来识别)。但是,我还需要能够根据reservation_number搜索其他表格(每个人预订都是唯一的)。

我有以下查询,提取每个预订并列出他们的到达日期,出发日期,他们住的房间,预订人数以及他们花费的金额。这是查询:

SELECT c.reservation_number, c.arrival_date, c.departure_date, r.room_type_code, p.number_of_persons, SUM(r.room_revenue + r.package_revenue) AS amount, SUM(r.spa_revenue) AS spa_revenue
FROM nw_src.dbo.customer_res c
JOIN nw_src.dbo.customer_resx p ON c.reservation_number = p.reservation_number
JOIN nw_src.dbo.res_revenue r ON c.reservation_number = r.reservation_number
WHERE c.cancellation_number = 0
GROUP BY c.reservation_number, c.arrival_date, c.departure_date, r.room_type_code, p.number_of_persons
ORDER BY c.reservation_number

这将逐个列出每个预订。如果sharer_code中的customer_res相同,我需要将它们分组。以下是customer_res表的示例:

reservation_number | arrival_date | departure_date | sharer_code 10002 2017-04-21 2017-04-23 10004 10003 2017-04-11 2017-04-12 0 10004 2017-04-21 2017-04-23 10004 10008 2017-04-21 2017-04-23 10004 10009 2017-05-06 2017-05-08 0 10010 2017-04-28 2017-04-30 10010

在上文中,预订1000210008属于一个群组,但位于sharer_code标识的单独预订(或不同的帐单)上。他们的团体预订被分配了号码'10004。

预订1000310009是可以在群组中的人,但无论哪种方式都在一个帐单上,因此不会有其他预订号码将其分组。

以下是customer_resx表的示例:

reservation_number | number_of_persons 10002 1 10003 4 10008 1 10009 2

这有助于澄清上述内容。 1000210008住在同一个房间,但是单独的账单上只有" 1"每个预订的人。但是,1000310009也有多个人住在一个​​房间,但他们都在一个账单上(或#34;预订")。

以下是res_revenue表的示例:

reservation_number | room_type_code | room_revenue | package_revenue | spa_revenue 10002 1cat -150 560 195 10002 1cat -150 560 315 10002 1cat 0 0 190 10003 1dol 236 1120 400 10003 1dol 0 0 245 10008 1cat -150 560 125 10008 1cat -150 560 290 10008 1cat 0 0 120 10009 1cyn 332.8 591.2 20 10009 1cyn 332.8 591.2 390 10009 1cyn 0 0 230

这是它非常清楚的地方。 1000210008都留在1cat,意味着他们是一个群体,我们需要将它们组合在一起。 10003在他们自己的房间1dol10009位于1cyn

最后,这就是我希望结果集看起来像:

reservation_number | arrival_date | departure_date | room_type_code | number_of_persons | amount | spa_revenue 10002 2017-04-21 2017-04-23 1cat 2 1640 1235 10003 2017-04-11 2017-04-12 1dol 4 1356 645 10009 2017-05-06 2017-05-08 1cyn 2 1848 640

请注意,reservation_number可以是100021000410008。这类似于MINsharer_codeMAX

0 个答案:

没有答案