2016-11-03 5 views
0

私は、これらの条件に基づいて、国への旅行者の数を生成するために、SQLスクリプトを作成しようとしています:旅行 SQLスクリプト

    • 自然滞在の年
      • より1ヶ月
      • L ESS
      • 1週間以上1週間以上が、1ヶ月未満は

    最終的な目標は、このような何かを得ることです(1年/ 1国):

    enter image description here

    私は単一のSQL文を手動で生成する方法を試みましたが、PL/SQLループ経由で行う方法がわかりません。誰かが私にどのように見せてもらえるかどうか感謝します。

    以下は、関連データベースのテーブル構造です。

    enter image description here

    enter image description here

    enter image description here

    これは私が現在持っているものですが、私は旅行者の数を得ることについてわからない午前:

    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') 
    

    私は合計(number_of_travellersを使用してみました)しかしそれは仕事をしなかった。 ありがとうございました!

    VW_ITINERARY_DURATION { ITINERARY_ID, DURATION_IN_DAYS, DURATION_IN_MONTHS } 
    

    ...その期間を作成するために使用されています:

    VW_ITINERARY_NARRATIVE { ITINERARY_ID, DURATION_NARRATIVE, SORT_ORDER }; 
    

    を次に、それは簡単です

  • +0

    これを試してください: 'sum(a.number_of_travellers)as number_of_trips'と' a.trip_id'でグループ化して教えてください –

    答えて

    0

    は、私はあなたが物事を打破する助けと繰り返しコードなどを避けるために、いくつかのビューを作成することをおすすめテーブルTB_TRAVELITINERARY,TB_TRIP,TB_COUNTRYおよびVW_ITINERARY_NARRATIVEの場合は、natural joinの場合。この単純なクエリで集計を試みると、事柄がより明確になることがあります。