我正在尝试创建一个SQL脚本,根据这些条件生成一个国家的旅行者数量:
最终目标是得到这样的东西(1年/ 1个国家):
我尝试过生成单个SQL语句的手动方式(花了我很长时间),但我不确定如何通过 PL / SQL循环。感谢是否有人能告诉我如何。
以下是我的数据库中包含相关字段的表格结构。
这就是我目前所拥有的,但我不确定如何获得旅客人数:
select c.country_name as country,
a.nature_of_travel,
case d.rn
when 1 then 'More than 1 month'
when 2 then 'Less than 1 week'
else 'Between 1 week and 1 month'
end length_of_stay,
count(*) number_of_trips, -- Supposed to use sum(number_of_travellers) here
to_char(b.from_date,'YYYY') year
from TB_TRAVELITINERARY b
join TB_TRIP a on a.trip_id=b.trip_id
join TB_COUNTRY c on b.country_code= c.country_code
join (select rownum rn from dual connect by level < 4) d on
case when add_months(b.from_date,1) < b.to_date then 1
when b.from_date+7 > b.to_date then 2
else 3
end = d.rn
group by c.country_name,
a.nature_of_travel,
case d.rn
when 1 then 'More than 1 month'
when 2 then 'Less than 1 week'
else 'Between 1 week and 1 month'
end,
to_char(b.from_date,'YYYY')
我尝试使用sum(number_of_travellers),但它没有用。 谢谢你的帮助!
答案 0 :(得分:0)
我建议您创建一些视图以帮助解决问题并避免重复代码,例如:
VW_ITINERARY_DURATION { ITINERARY_ID, DURATION_IN_DAYS, DURATION_IN_MONTHS }
...其持续时间用于创建:
VW_ITINERARY_NARRATIVE { ITINERARY_ID, DURATION_NARRATIVE, SORT_ORDER };
然后,natural join
表格TB_TRAVELITINERARY
,TB_TRIP
,TB_COUNTRY
和VW_ITINERARY_NARRATIVE
就是一个简单的例子。如果您在这个简单的查询中尝试求和,那么事情可能会变得更加清晰。