2017-06-21 12 views
0

私は同様の質問を見たことがありますが、私がやろうとしていることの印は全くありません。sql select複数のテーブルをピックアップ

テーブル:製品、計画、性能。

目的を果たす以外に、パフォーマンステーブルは、他の2つのテーブル間の多対多の関係を表します。

performance.PlanID = plan.PlanID 
performance.ProductID = product.ProductID 

はこのために関心の3つのフィールドがあります:

ProductName 
LiveCapacity 
PendingCapacity 
:私は以下の結果と選択クエリを記述するために探しています

product.ProductName 
plan.Status (Live or Pending) 
performance.Capacity 

のは、リンクフィールドを呼ぶことにしましょう

私は、クエリのFROM(SELECT ...)部分で必要な内部結合を持つピボットを試みましたが、それが正しいとは思わない。

+0

? Postgres?オラクル? DB2?ファイアバード? –

答えて

0

ピボット例を。 DBMSは、使用している

SELECT 
    t.ProductName, 
    [Live] AS LiveCapacity, 
    [Pending] AS PendingCapacity 
FROM 
(
    SELECT product.ProductName, 
      performance.Capacity, 
      plan.Status 
    FROM product 
      JOIN performance ON performance.ProductID = product.ProductID 
      JOIN plan ON performance.PlanID = plan.PlanID 
) t 
PIVOT (
    SUM(Capacity) 
    FOR Status IN ([Live],[Pending]) 
) p 

非ピボット例

SELECT product.ProductName, 
     SUM(CASE WHEN plan.Status = 'Live' THEN performance.Capacity END) as LiveCapacity, 
     SUM(CASE WHEN plan.Status = 'Pending' THEN performance.Capacity END) as PendingCapacity 
FROM product 
     JOIN performance ON performance.ProductID = product.ProductID 
     JOIN plan ON performance.PlanID = plan.PlanID 
GROUP BY product.ProductName 
+0

これは素晴らしいことです。ありがとうございました。 – gravityclown

0

このようなクエリの結果はどうなりますか?

SELECT product.ProductName as Name, plan.Status as Status, 
    performance.Capacity as Capacity 
FROM product, plan, performance 
WHERE performance.PlanID <> plan.PlanID 
    AND performance.ProductID <> product.ProductID 
; 
+0

ありがとうございます。私はピボットを探しています。 – gravityclown

0

明示的な結合を使用することをお勧めします。

はあなたのコメントからの更新:

SELECT product.ProductName as Name 
    , plan.Status as Status 
    , SUM(performance.Capacity) as Capacity 
FROM product 
INNER JOIN plan 
    ON performance.PlanID = plan.PlanID 
INNER JOIN performance 
    ON performance.ProductID = product.ProductID 
GROUP BY product.ProductName 
     , plan.Status as Status 
+0

ありがとうございます。私が欲しがっているのは、2つの可能な状態の容量の合計です。 – gravityclown

+0

ありがとうございます。私が欲しがっているのは、2つの可能な状態の容量の合計です。 名前LiveCapacity Pendingキャパシティ -------- ----------------- ------------------- --- Product1 56 52 Product2 34 30 など 私のピボットクエリのFROM(SELECT ....)セクションで明示的な結合を使用しています。 私は今晩のマシンからワークスペースにアクセスできません。そうでなければ、私は完全なコードを提出します。選択肢がある場合は、これに対して選択クエリを使用しませんが、このDBでは権利が制限されています。 – gravityclown

関連する問題