2017-09-26 149 views
1

我有一個包含的SerialNo,StockItemId,類型的表,WareHouseId,NetCount 這是我的查詢需要進行查詢,類似的在Excel中使用和操作的數據透視表

SELECT Warehouse.WHWorkOrderDetailsSerials.SerialNo 
    ,Warehouse.WHWorkOrderDetails.StockItemId, Warehouse.WHWorkOrderHeader.Type 
    ,Warehouse.WHWorkOrderHeader.WareHouseId 
    ,CASE 
     WHEN Warehouse.WHWorkOrderHeader.Type IN ('RS', 'RR', 'RT', 'OB') 
     THEN '1' 
     ELSE '-1' 
     END AS NetCount 
FROM Warehouse.WHWorkOrderDetails 
INNER JOIN Warehouse.WHWorkOrderDetailsSerials 
     ON Warehouse.WHWorkOrderDetails.Id = Warehouse.WHWorkOrderDetailsSerials.WorkOrderDetailId 
     INNER JOIN Warehouse.WHWorkOrderHeader 
     ON Warehouse.WHWorkOrderDetails.WHWorkOrderHeaderId = Warehouse.WHWorkOrderHeader.ID 

Figure 1 我需要做一個數據透視表,其中包含每個WorkHouseId的NetCount之和。像這個數據透視表在Excel中一樣 Figure 2

任何想法都可以這麼做嗎?

+0

*樞軸*在MySQL和SQL Server中有很大不同。請[編輯]您的標籤,讓我們知道哪一個與您的情況有關。 –

+0

有兩件事:1)將NetCount THEN ELSE更改爲1,-1而不是'1',' - 1'。這是兩回事。 2)這聽起來很像X-Y問題(http://xyproblem.info)。你想用這些錢做什麼?你需要一個數據透視表還是每個倉庫編號只需一筆數額?編輯:和#3:別名表使它更容易閱讀。 – Shawn

+0

@ O.Jones好的感謝這個信息 – Believer

回答

0

你可以改變你的查詢做一個PIVOT,而不必把它放在Excel中。

SELECT SerialNo, [1], [2], [3], [4], [5] 
    FROM 

(SELECT Warehouse.WHWorkOrderDetailsSerials.SerialNo 
,Warehouse.WHWorkOrderDetails.StockItemId, Warehouse.WHWorkOrderHeader.Type 
,Warehouse.WHWorkOrderHeader.WareHouseId 
,CASE 
    WHEN Warehouse.WHWorkOrderHeader.Type IN ('RS', 'RR', 'RT', 'OB') 
    THEN '1' 
    ELSE '-1' 
    END AS NetCount 
FROM Warehouse.WHWorkOrderDetails 
INNER JOIN Warehouse.WHWorkOrderDetailsSerials 
    ON Warehouse.WHWorkOrderDetails.Id = Warehouse.WHWorkOrderDetailsSerials.WorkOrderDetailId 
    INNER JOIN Warehouse.WHWorkOrderHeader 
    ON Warehouse.WHWorkOrderDetails.WHWorkOrderHeaderId = Warehouse.WHWorkOrderHeader.ID) AS d PIVOT(SUM(NetCount) FOR WareHouseId IN ([1],[2],[3],[4],[5])) 

似乎並不需要您在原始查詢中擁有的所有字段。我更新了下面的查詢,只顯示您需要的字段。

SELECT SerialNo, [1], [2], [3], [4], [5] 
    FROM 

(SELECT Warehouse.WHWorkOrderDetailsSerials.SerialNo 
,Warehouse.WHWorkOrderHeader.WareHouseId 
,CASE 
    WHEN Warehouse.WHWorkOrderHeader.Type IN ('RS', 'RR', 'RT', 'OB') 
    THEN '1' 
    ELSE '-1' 
    END AS NetCount 

FROM Warehouse.WHWorkOrderDetails 
INNER JOIN Warehouse.WHWorkOrderDetailsSerials 
    ON Warehouse.WHWorkOrderDetails.Id = Warehouse.WHWorkOrderDetailsSerials.WorkOrderDetailId 
    INNER JOIN Warehouse.WHWorkOrderHeader 
    ON Warehouse.WHWorkOrderDetails.WHWorkOrderHeaderId = Warehouse.WHWorkOrderHeader.ID) AS d PIVOT(SUM(NetCount) FOR WareHouseId IN ([1],[2],[3],[4],[5])) 
+0

沒問題,隨時評價答案。 :) –

相關問題