2017-09-26 7 views
1

とExcelのピボットテーブルのように、私は、のSerialNo、StockItemId、タイプを含むテーブルを持っているWareHouseId、NetCount これは私のクエリは私が必要和演算

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

2つのこと:1)NetCount THEN ELSEを '1'、 ' - 1'の代わりに-1、-1に変更します。それらは2つの異なるものです。 2)これはX-Y問題(http://xyproblem.info)のように聞こえます。これらの合計で何をしようとしていますか?倉庫IDごとにピボットまたは単純に合計が必要ですか?編集:そして#3:あなたが読むことをはるかに簡単にするためにテーブルのエイリアス。 – Shawn

+0

@ O.Jonesこの情報をお寄せいただきありがとうございます – Believer

答えて

0

Excelに配置することなく、PIVOTを実行するようにクエリを変更することができます。

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

問題はありませんが、答えを評価してください。 :) –

関連する問題