2016-06-16 16 views
0

こんにちは、みんな私はTotalSoldの列の指定された日付の合計を取得する方法に苦労している。ここにPartNumber、TotalOrder、TotalSold、およびPOUnitCostがあります。 TotalSoldの日付がSO_SalesOrderという名前の別のテーブルにあるので、どのようにしてそれをフィルタリングできますか?ありがとう!与えられた日付の合計を得るMS SQL

MYQUERY:

select PartNumber = (select name from base_product as PROD where prod.prodid = POL.prodid), 
     TotalOrder = sum(POL.quantity), 
     TotalSold = (select sum(SOL.quantity) from so_salesorder_line as SOL where SOL.ProdId = POL.prodid), 
     PoUnitCost = max(POL.UnitPrice)      
from PO_Purchaseorder_line as POL 
where POL.purchaseorderid in (
    select purchaseorderid 
    from PO_purchaseorder as PO 
    where orderdate >= '5/1/2015') 
group by POL.prodid 
+2

どのようなRDBMSを使用しますか? MySQLのように見えます。 – gofr1

+1

そして、質問は? –

+0

MsSQLのマエストロで、TotalSoldの日付をフィルタリングしたい – Christine

答えて

1

日付にアクセスすることができるようにso_salesorderso_salesorder_lineに参加。

ところで、あいまいな日付文字列の代わりにISO日付リテラルを使用してください。

ここでは、TotalSoldを取得するための部分です(5月1日の場合は、これを '20150105'に変更してください)。これは、5月1日または1月5日のDBMSの設定に応じて、代わりに1月5日が必要な場合)

TotalSold = 
(
    select sum(SOL.quantity) 
    from so_salesorder_line as SOL 
    join so_salesorder SO on SO.salesorderid = SOL.salesorderid 
    where SOL.ProdId = POL.prodid 
    and SO.orderdate >= '20150501' 
), 
+0

私はそれがうれしいです:-)しかし、あなたの要求に私の最後のコメントを参照してください。クエリが正しく表示されません。 TotalSoldは製品を指しますが、POL.descriptionは注文位置を指します。それは奇妙に見えます。結果の行は、商品*または*受注のいずれかである必要があります。 –

+0

こんにちは私はすでにそれをchagedしました。あなたに感謝;) – Christine

+0

こんにちは私は結果にまだ間違っていることに気づいた、私はそれを修正しようとしたと私は正しいクエリを持っていると思う。 :) – Christine

1

私が参加しての作業ははるかに簡単かつ明確だと思います。この方法を試してください。

select po.orderdate, POL.description, 
    prod.name as PartNumber 
    sum(POL.quantity) as TotalOrder, 
    sum(SOL.quantity) as TotalSold, 
    max(POL.UnitPrice) as PoUnitCost      
    from PO_Purchaseorder_line as POL 
    left join so_salesorder_line as SOL on SOL.ProdId = POL.prodid 
    left join PO_purchaseorder as PO on POL.purchaseorderid=PO.purchaseorderid 
    left join base_product as PROD on prod.prodid = POL.prodid 
    where po.orderdate >= '5/1/2015' 
    group by po.orderdate, POL.prodid,prod.name 
+0

こんにちは。また、TotalSoldの日付をフィルターに掛けたいと思います。 – Christine

+0

@ Djacks007:ジョインを使って作業すると、最初にエラーが発生しやすくなります:-)異なるテーブルのアグリゲートを操作する場合は、テーブルではなくアグリゲートを結合します。日付のPOLとSOLに複数のレコードを持つ製品では、値を掛けて不正な結果を得ることになります。 –

0

私はそれを改訂して正しい結果を得ました。

SELECT DISTINCT 
BASE_Product.NAME, 
BASE_Product.DESCRIPTION, 

TotalOrders = (Select(Select sum(quantity) from PO_PurchaseOrder_Line as POL 
LEFT JOIN PO_PurchaseOrder PO ON POL.PurchaseOrderId = PO.PurchaseOrderId 
     where POL.ProdId = BASE_Product.ProdId AND orderdate >= '20140101')), 

PoPrice = (Select max(UnitPrice) from PO_PurchaseOrder_Line as POL where POL.ProdId = BASE_Product.ProdId), 

PoExRate = (Select ExchangeRate from PO_PurchaseOrder where PO_PurchaseOrder.PurchaseOrderId = POL.PurchaseOrderId) , 

UnitCost = (POL.UnitPrice) * (Select Round(ExchangeRate, 4) from PO_PurchaseOrder where PO_PurchaseOrder.PurchaseOrderId = POL.PurchaseOrderId) , 

TotalSold = (SELECT SUM(SOL.quantity) FROM so_salesorder_line AS SOL 
    LEFT JOIN so_salesorder SO ON SO.salesorderid = SOL.salesorderid 
    WHERE SOL.ProdId = BASE_Product.prodid AND SO.orderdate >= '20150101') 

FROM BASE_Product 

FULL JOIN PO_PurchaseOrder_Line as POL ON BASE_Product.ProdId = POL.ProdId 
関連する問題