3

今私は3つのテーブルを持っています

注文:

ID | 日付 | マシン | 計画

グッドピース:

ID | 日付 | マシン | ピース | 製品

不良品:

ID | 日付 | マシン | ピース | 製品 | 成分

クエリの出力は次のとおりです。

日付 | マシン | 企画 | グッドピース | グッドピース | バッドピース

実際のクエリは次のようなものです。

SELECT
  data.Date AS Date,
  data.Machine AS Machine,
  SUM(CASE WHEN data.type = 'Planning' THEN data.value END ) AS Planning,
  SUM(CASE WHEN data.type = 'GoodPieces' THEN data.value END ) AS GoodPieces,
  SUM(CASE WHEN data.type = 'BadPieces' THEN data.value END ) AS BadPieces
FROM
      ( SELECT
          'Planning' AS Type,
          Date AS Date,
          Machine AS Machine,
          Planning AS Value
        FROM Orders
        UNION ALL
        SELECT
          'GoodPieces',
          Date,
          Machine,
          Pieces AS Value
        FROM GoodPieces
        UNION ALL
        SELECT
          'BadPieces'
          Date,
          Machine,
          Pieces AS Value
        FROM BadPieces ) AS data
GROUP BY
   Date,
   Machine

私の質問は、この 3 つのテーブルで同じ出力を得る方法があるかどうかです。

注文:

ID | 日付 | マシン| 計画

グッドピース:

オーダーID | ピース | 製品

不良品:

オーダーID | ピース | 製品 | 成分

ありがとう、

4

1 に答える 1

5

確かにLEFT JOIN、テーブルだけで適切な列を合計します。

SELECT
  O.Date,
  O.Machine,
  SUM(COALESCE(O.Planning, 0)) AS Planning,
  SUM(COALESCE(G.Pieces, 0)) AS GoodPieces,
  SUM(COALESCE(B.Pieces, 0)) AS BadPieces
FROM
  Orders O
LEFT JOIN
  (SELECT G.OrderID,
     SUM(COALESCE(G.Pieces, 0)) AS GoodPieces
   FROM GoodPieces G
   GROUP BY G.OrderID) G ON G.OrderID = O.ID
LEFT JOIN
  (SELECT B.OrderID,
     SUM(COALESCE(B.Pieces, 0)) AS BadPieces
   FROM BadPieces B
   GROUP BY B.OrderID) B ON B.OrderID = O.ID
GROUP BY
  O.Date,
  O.Machine;

デモ: http://www.sqlfiddle.com/#!3/09a73/17

編集@MikaelEriksson:コメントで指定されたポイントを処理するように更新されました。

于 2012-04-14T21:28:50.777 に答える