2016-12-11 10 views
0

私は、ユニオンオペレータによってグループ化された出荷を集計するためのクエリが不足しているようです。今日、エージェント、ドライバー(U.AgentCode)が特定の国(U.CtryCode、U.CtryName)に配送した総出荷数(count(Distinct。U.SjipmentId))を取得するために取り組んでいました。出荷台数の合計額を取得するために一緒にすべての出荷台数を合計します。 誰もがあなたが私の最も現在のクエリを見ることができますIこれは簡単に達成し、単純な方法? できるか助言する。T-SQLクエリの支援が必要です。UNION、JOINS、COUNT

SELECT U.AgentCode, U.CtryCode, U.CtryName, count(distinct U.Id) 
    FROM (
    select Agent.AgentCode, Addr.CtryCode, Ctry.Name, Ship.Id 
    from Shipment 
    LEFT JOIN RouteTab (nolock) ON RoutTbl.Cexp= Shipment.ID 
    LEFT JOIN Agent (NOLOCK) ON Agent.AgentID = RouteTbl.AgentID 
    LEFT JOIN Addr (NOLOCK) ON Addr.AddrId = Shipment.AddrId 
    LEFT JOIN Ctry (NOLOCK) ON Ctry.Id = Addr.Id 
    WHERE RouteTbl.Bur ='GB01' AND Agent.AgentCode IS NOT NULL 
    Union ALL 
    select Driver.DriverCode, Addr.CtryCode, Ctry.Name, Shipment.Id 
    from Shipment 
    LEFT JOIN RouteTab (nolock) ON RoutTbl.Cexp= Shipment.Id 
    LEFT JOIN Driver (NOLOCK) ON Driver.DriverId = RouteTbl.DriverId 
    LEFT JOIN Addr (NOLOCK) ON Addr.AddrId = Shipment.AddrId 
    LEFT JOIN Ctry (NOLOCK) ON Ctry.Id = Addr.Id 
    WHERE RouteTbl.Bur ='GB01' AND Driver.DriverCode IS NOT NULL 
    ) as U 
GROUP BY U.AgentCode, U.CtryCode, U.CtryName 
ORDER BY U.AgentCode, U.CtryCode, U.CtryName 
+0

可能な重複(http://stackoverflow.com/questions/5146978/count-number-of-records-returned-by-group-by) – Terminus

+0

この1つ:http://stackoverflow.com/questions/12927268/sum-of-grouped-count-in-sql-query/12927333#12927333 – Terminus

答えて

0

連合文を行う必要がありUnion Allコマンドの下にあるコードでは、正確に同じ列名を使用してください。

select Driver.DriverCode as AgentCode, Addr.CtryCode, Ctry.Name, Shipment.Id 

またchanどちらのselect文でもCtry.NameCtry.Name as CtryNameとなります。

0

UNIONと同じコードがあります。良い方法WITH節を使用する。 selectにはUNIONは必要ありません。代わりに左の結合とCOALESCEを使用してください。また

;With r_tab AS 
(
select RouteTab.AgentID, Addr.CtryCode, Ctry.Name, Ship.Id,RouteTab.DriverId 
    from Shipment 
    LEFT JOIN RouteTab (nolock) ON RouteTab.Cexp= Shipment.ID 
    LEFT JOIN Addr (NOLOCK) ON Addr.AddrId = Shipment.AddrId 
    LEFT JOIN Ctry (NOLOCK) ON Ctry.Id = Addr.Id 
    WHERE RouteTab.Bur ='GB01' 
) 
SELECT COALESCE(Agent.AgentCode,Driver.DriverCode) AgentCode, U.AgentCode, U.CtryCode, U.CtryName, 
     count(distinct U.Id) 
    FROM r_tab U 
    LEFT JOIN Agent (NOLOCK) ON Agent.AgentID = U.AgentID 
     AND Agent.AgentCode IS NOT NULL 
    LEFT JOIN Driver (NOLOCK) ON Driver.DriverId = U.DriverId 
     AND Driver.DriverCode IS NOT NULL 
GROUP BY COALESCE(Agent.AgentCode,Driver.DriverCode), U.CtryCode, U.CtryName 
ORDER BY U.AgentCode, U.CtryCode, U.CtryName`enter code here` 
[によりグループによって返されるレコードのカウント数]の
関連する問題