1

修理を追跡するシステムを検討してください。顧客データと共通の ID キーを含むテーブルがあります。各 ID キーで使用された修理部品の種類と使用された数を示す列を含む 2 番目のテーブルがあります。それらの定義は以下のとおりです。

order_information
order_id  |  cust_last_name
465          Smith
899          Williams
512          Johnson
345          Fenton
122          Bowles
944          Cooper

parts_usage
order_id  |  part_type  |  part_quantity
465          Part 1        5
465          Part 2        4
899          Part 1        2
899          Part 2        8
899          Part 3        6
512          Part 3        1
345          Part 2        4
345          Part 3        5
122          Part 2        3
944          Part 1        2

次のように分割されたパーツの断片を返すレポート用のクエリを実行したいと思います。

order_id  |  Part 1  |  Part 2  |  Part 3  |  Total
465          5          4                     9
899          2          8          6          16
512                                1          1
345                     4          5          9
122                     3                     3
944          2                                2

各修理チケットで使用された各パーツの数をレポートに表示できるように、クエリを使用してこれを行うことはできますか?

ご覧のとおり、それぞれorder_idに複数のパーツ タイプと固有の数量を含めることができます。さまざまなパーツ タイプ (合計 3 つ) を 3 つの個別の列に分割し、合計をorder_id.

4

1 に答える 1

1
select order_id, [Part 1], [Part 2], [Part 3], Total
from 
(
  select oi.order_id
    , part_type
    , part_quantity
    , Total = sum(part_quantity) over (partition by oi.order_id)
  from order_information oi
    inner join parts_usage pu on oi.order_id = pu.order_id
) as parts
pivot 
(
  sum(part_quantity) for part_type in ([Part 1], [Part 2], [Part 3])
) as pvt
order by order_id

これは私にとってはうまくいきます。

結果セットも注文しorder_idました。例の結果に特定の順序があるようには見えませんが、質問の詳細に記載されています。

PIVOTSUM集計ウィンドウ関数と組み合わせることが重要であることがわかります。

demo を使用した SQL Fiddle

于 2013-06-11T20:57:43.340 に答える