2017-06-21 74 views
0

我看過類似的問題,但沒有發現我正在嘗試做的事。sql選擇透視多個表格

3表格:產品,計劃,表現。

除了服務目的之外,性能表代表另外兩個表之間的多對多關係。

讓我們叫的連接字段:

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

有感興趣的3個字段此:

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

我期待寫有以下結果的選擇查詢:

ProductName 
LiveCapacity 
PendingCapacity 

我試圖在查詢的FROM(SELECT ...)部分中使用所需的內部聯接進行數據透視,但我可以似乎沒有得到它的權利。

+0

哪些DBMS您使用的非關鍵數據的例子嗎? Postgres的?甲骨文? DB2?火鳥? –

回答

0

樞軸例子。

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

謝謝。我想要轉移的是兩種可能狀態的容量總和。 – gravityclown

+0

謝謝。我想要轉移的是兩種可能狀態的容量總和。 名稱LiveCapacity PendingCapacity -------- ----------------- ------------------- --- Product1 56 52 Product2 34 30 等 我在我的透視查詢的FROM(SELECT ....)部分使用顯式連接。 我今晚無法從機器上進入工作區,否則我會提交完整的代碼。如果我有我的選擇,我根本不會使用選擇查詢,但我的權限在此數據庫中受到限制。 – gravityclown