2

データベースにクエリを実行し、同じフィールドから複数の列を持つ結果を返そうとしています。

私のデータベースのデータは次のようになります。

  id,        price,       cost,       description,        color
  --------------------------------------------------------------        
  10,         99,          50,         bicycle,           blue
  15,         88,          45,         tricycle,          red
  18,         90,          48,         tricycle,          blue
  20,         95,          55,         bicycle,           red

次のように、各タイプの色を「青」または「赤」として表す複数の列と、その ID、価格、コスト、および説明を返す結果を返すクエリを作成しようとしています。

Blue, id, price, cost, description, Red, id, price, cost, description
blue, 10, 99,    50,   bicycle,     red, 15, 88,    45,   tricycle
blue, 18, 90,    48,   tricycle,    red, 20, 95,    55,   bicycle

ポイントは、データを並べて表示できるようにすることです。データが Excel にあれば、ピボット テーブルで簡単にこれを行うことができますが、SQL クエリを使用してこれを達成しようとしています。

私が提供できる他の情報があれば教えてください。

*

したがって、以下のコメントを確認して、現在作業している実際のコードを含める方がよいのではないかと考えています。

私の問題: 1 つのクエリで両方の select ステートメントの結果が必要ですが、その方法がわかりません。したがって、合計で7つの列があります

等級コード、休業損害件数、休業損害、損害保険金平均、医療のみの保険金請求件数、医療のみの保険金請求、医療のみの保険金請求平均

select distinct cm.class_code, count(cm.class_code) as "Lost Time Claim Count",
   round(sum(cf.Incurred_Total),0) as "Lost Time Incurred Loss",
   round((sum(cf.Incurred_Total)/count(cm.class_code)),0) as "Lost Time Claim Average",
   cm.claim_type_group

from claim_master cm left outer join
 claim_financial_view cf on cm.claim_master_id = cf.Claim_Master_Id

where cm.accident_date > to_date('31-Dec-2007','dd-mm-yyyy') and
  cm.accident_date < to_date('01-Jan-2013','dd-mm-yyyy') and
  cm.claim_type_group = 'L'

group by cm.class_code,
     cm.claim_type_group

Order by cm.class_code

__

select distinct cm.class_code, count(cm.class_code) as "Medical Only Claim Count",
   round(sum(cf.Incurred_Total),0) as "Medical Only Incurred Loss",
   round((sum(cf.Incurred_Total)/count(cm.class_code)),0) as "Medical Only Claim      Average",
   cm.claim_type_group

from claim_master cm left outer join
 claim_financial_view cf on cm.claim_master_id = cf.Claim_Master_Id

where cm.accident_date > to_date('31-Dec-2007','dd-mm-yyyy') and
  cm.accident_date < to_date('01-Jan-2013','dd-mm-yyyy') and
  cm.claim_type_group = 'M'

group by cm.class_code,
     cm.Claim_Type_Group

Order by cm.class_code
4

1 に答える 1

1

データ間には関係がないので、作成するのが最も簡単だと思います。これは、おそらく多くの可能な解決策の 1 つです。

select a.color as blue, a.id as idb, a.price as priceb
     , a.cost as costb, a.description as descb
     , b.color as red, b.id as idr, b.price as pricer
     , b.cost as costr, b.description as descr
  from ( select x.*, row_number() over ( order by id ) as rn
           from my_table x
          where color = 'blue'
                ) a
  full outer join ( 
         select x.*, row_number() over ( order by id ) as rn
            from my_table x
           where color = 'red'
                 ) b
    on a.rn = b.rn

SQL フィドル

分析関数はROW_NUMBER()結合するものを提供し、FULL OUTER JOIN を使用することで、ある色が別の色よりも多くの行を持っているかどうかは問題ではありません。


コードに別の列名を追加しました。原則はまったく同じです。現在のクエリは、ここにあるサブクエリになります。

于 2013-09-11T19:55:05.883 に答える