0

SQL Server 2005には、Rep_table、Selling、Upgrade、Deliveryなどのテーブルがあります。

販売、アップグレード、配信の列の合計を取得しようとしています。Rep_Tableには、Rep_TableID、CommID、およびMerchantIDの列があります。販売にはSellingID、Rep_TableID、AmountSold、S_AmountCollected、アップグレードには列UpgradeID、Rep_TableID、AmountUpgraded、U_AmountCollected配信には列DeliveryID、Rep_TableID、D_AmountCollectedがあります

Rep_Tableには、販売、アップグレード、配信用にそれぞれ1つずつ、合計3つのレコードがあります。私の目標は、販売済みとアップグレード済みの合計、3つのテーブルから収集されたすべての合計、および残高を取得することです。

以下のクエリを試してみると、結合がうまく機能していることがわかりません。このクエリでは、各マーチャントについて、1行で販売、1行でアップグレード情報、もう1行で配達が表示されます。私が探しているのは、すべての計算を実行し、各マーチャントに対して1行にする必要があるということです。私が求めていることを明確にしたいと思います。よろしくお願いします!

Select *, isnull(cast(S.AmountSold as numeric(10,2)), 0) + isnull(cast(U.AmountUpgraded as numeric(10,2)), 0) as AmountSold,
isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) + isnull(cast(U.U_AmountCollected as numeric(10,2)), 0) + isnull(cast(D.D_AmountCollected as numeric(10,2)), 0) as AmountCollected,
(isnull(cast(S.AmountSold as numeric(10,2)), 0) + isnull(cast(U.AmountUpgraded as numeric(10,2)), 0)) - 
(isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) + isnull(cast(U.U_AmountCollected as numeric(10,2)), 0) + + isnull(cast(D.D_AmountCollected as numeric(10,2)), 0) ) as Balance

 from Rep_Table RD
inner join Merchant M on M.MerchantID = RD.MerchantID --for MerchantInfo
left outer join SellingInfo S on S.RepInfoID = RD.RepInfoID
left outer join UpgradingInfo U on U.RepInfoID = RD.RepInfoID
left outer join DeliveryInfo D on D.RepInfoID = RD.RepInfoID
where RD.CommuniTeeID = @CommuniTeeID
4

1 に答える 1

0

OK、以下を試してみてください:

Select sum(isnull(cast(S.AmountSold as numeric(10,2)), 0) + isnull(cast(U.AmountUpgraded as numeric(10,2)), 0)) as AmountSold
    , sum(isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) + isnull(cast(U.U_AmountCollected as numeric(10,2)), 0) + isnull(cast(D.D_AmountCollected as numeric(10,2)), 0)) as AmountCollected
    , sum((isnull(cast(S.AmountSold as numeric(10,2)), 0) + isnull(cast(U.AmountUpgraded as numeric(10,2)), 0)) - (isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) + isnull(cast(U.U_AmountCollected as numeric(10,2)), 0) + + isnull(cast(D.D_AmountCollected as numeric(10,2)), 0) )) as Balance
from Rep_Table RD
inner join Merchant M on M.MerchantID = RD.MerchantID --for MerchantInfo
left outer join SellingInfo S on S.RepInfoID = RD.RepInfoID
left outer join UpgradingInfo U on U.RepInfoID = RD.RepInfoID
left outer join DeliveryInfo D on D.RepInfoID = RD.RepInfoID
where RD.CommuniTeeID = @CommuniTeeID
group by m.MerchantID

SUM各列にa を追加し(*複雑になる可能性があるため、 を削除しました)、GROUP BYonを追加しましたm.MerchantID

于 2013-01-30T15:46:43.437 に答える