2012-02-17 5 views
0

データベースの設定方法に問題があると私は完全にはわかっていません。基本的には、クエリで2つの異なるテーブルを使用していますが、トランザクションとチケット価格について説明します。彼らは、(い​​くつかのサンプルデータでは)次のようになります。クエリ内の2つのテーブルを結合し、そのテーブルから新しいカラムを作成する

TRANSACTIONS 
    Transation ID | Ticket Quantity | Total Price | Salesperson | Ticket Price ID 
     5489    250   250   Jim    8765 
     5465    50    150   Jim    1258 
     7898    36    45    Ann    4774 


    Ticket Prices 
    Ticket Price ID | Quantity | Price | Bundle Name 
     8765   1   1   1 ticket, $1 
     4774   12   15  5 tickets, $10 
     1258   1   3   1 ticket, $3 

私は何を目指してることはバンドルタイプによって、各販売員の売上高を分解したレポートです。私は、Webを検索してきた、そしてこのようにそれを得るための最善の方法は、様々なサブクエリを使用しているようで、限りコラムのタイトルを取得するだけでなく働く

Sales Volume/Salesperson 
Name | Bundle A | Bundle B | Bundle C | Total 
Jim  250   0   50  300 
Ann  0   36   0  36 

:結果の表には、このようなものでなければなりません適切に表示されますが、実際の数値合計までは機能しません。これは基本的にデータを組み合わせ、各営業担当者に合計の読取り値を与えます(この例では、JimとAnnの両方がBundle Aで250件、Bundle Bで36件など)。私に適切な結果を与えるクエリを書くことができる方法はありますか?それとも少なくともそれに近いものさえ?どのような入力をありがとう。

+0

1がありますあなたの 'TICKET_PRICES'テーブルの中の' ID'ですか?もしそうなら、「チケット価格ID」8765が「バンドルA」であることをどのように知っていますか? 'TICKET_PRICES'テーブルに3つ以上の行があるとどうなりますか?あなたの出力の列を増やしたいですか? –

+0

SQL Serverを使用すると、計算にクロス適用を使用してこれを行うことができ、オンザフライで列を作成できますが、これがoracleで可能かどうかはわかりません。 – Standage

+0

@JustinCave現時点では、私はそれを知る方法がないので、最初にハードコードされた値で基本構造を取得したかっただけです。理想的には、はい。異なるバンドルにあるものと同じ数の列を出力したいと思います。 – Linkmaster94

答えて

0

OracleでPIVOT文を使用すると、これを実行できます。クエリは次のようになります。このような

WITH pivot_data AS (
      SELECT t.salesperson,p.bundle_name,t.ticket_quantity 
      FROM ticket_prices p, transactions t 
      where t.ticket_price_id = p.ticket_price_id 
     ) 
    SELECT * 
    FROM pivot_data 
    PIVOT (
      sum(ticket_quantity)  --<-- pivot_clause 
     FOR bundle_name   --<-- pivot_for_clause 
     IN ('1 ticket, $1','5 tickets, $10', '1 ticket, $3') --<-- pivot_in_clause 
     ); 

あなたを与えるだろうな結果:検索結果の「バンドルA」および `チケット価格との1人の関係:

enter image description here

+0

これは有望そうです。どれくらいのバンドルがあるのか​​わからなくてもこれは動作しますか? – Linkmaster94

+0

構文ではIN(ANY)またはIN()を指定できますが、PIVOTの代わりにPIVOT XMLを使用する場合にのみ有効です。 PIVOT XMLの結果は、PIVOTを使用するときと同じように、通常の照会結果ではなく、SALESPERSONおよびBUNDLE_NAME_XMLのリストになります。 – GTG

関連する問題