1

私が取り組んでいるクエリがあります。基本的には3つの列があります:

Code: The users Code
Orders Taken: The orders which have been taken
Orders Taken From an External Call

http://gyazo.com/b412a5bb2980feb3220355fa4a8caf5a

基本的に、外部呼び出しからの注文のみに where 句を使用できるようにする方法が必要です。WHERE 句を追加すると、両方のテーブルに対してそれが行われます。

これまでの私のクエリ:

SELECT T_Temp_RestrictedDiaryCalls.AccreditedDomainCode, 
    Count(T_Temp_RestrictedProductSalesHistory.CustomerCode) AS [Orders Taken],
    Count(T_Temp_RestrictedProductSalesHistory.CustomerCode) AS [Orders From External Calls]

    FROM T_Temp_RestrictedDiaryCalls 
        INNER JOIN T_Temp_RestrictedProductSalesHistory 
            ON (T_Temp_RestrictedDiaryCalls.CustomerCode = T_Temp_RestrictedProductSalesHistory.CustomerCode) 
            AND (T_Temp_RestrictedDiaryCalls.CallDate = T_Temp_RestrictedProductSalesHistory.EntryDate)

    GROUP BY T_Temp_RestrictedDiaryCalls.AccreditedDomainCode;

どんな助けでも大歓迎です。

4

3 に答える 3

0

私が正しく理解している場合、これらのOrders列の両方で同じテーブルのデータをカウントする必要がありますが、テーブルのどのレコードがカウントされ、どのレコードがカウントされないかについて異なる制限があります。したがって、次のようにします。

SELECT T_Temp_RestrictedDiaryCalls.AccreditedDomainCode, 
    Count(SalesHistoryForAllOrders.CustomerCode) AS [Orders Taken],
    Count(SalesHistoryForExternalOrders.CustomerCode) AS [Orders From External Calls]

    FROM T_Temp_RestrictedDiaryCalls 
        INNER JOIN T_Temp_RestrictedProductSalesHistory SalesHistoryForAllOrders 
            ON (T_Temp_RestrictedDiaryCalls.CustomerCode = SalesHistoryForAllOrders.CustomerCode) 
            AND (T_Temp_RestrictedDiaryCalls.CallDate = SalesHistoryForAllOrders.EntryDate)
        INNER JOIN T_Temp_RestrictedProductSalesHistory SalesHistoryForExternalOrders 
            ON (T_Temp_RestrictedDiaryCalls.CustomerCode = SalesHistoryForExternalOrders.CustomerCode) 
            AND (T_Temp_RestrictedDiaryCalls.CallDate = SalesHistoryForExternalOrders.EntryDate)

    GROUP BY T_Temp_RestrictedDiaryCalls.AccreditedDomainCode;

説明:

テーブルを 2 回 INNER JOIN し、そのたびにエイリアスを作成することで、作業するテーブルの 2 つの別個の表現 ( とSalesHistoryForAllOrdersと呼ばれるSalesHistoryForExternalOrders) ができました。

次に、それらのいずれかを個別に参照する WHERE 句を自由に配置できます。これは、その列にのみ影響し、他の列には影響しません。したがって、次のいずれかを行います。

WHERE SalesHistoryForExternalOrders.IsAnExternalOrder > 0

または、追加の AND を 2 番目の INNER JOIN に追加するだけです。

AND SalesHistoryForExternalOrders.IsAnExternalOrder > 0

、結果は同じです。その句はExternal Calls列にのみ適用されます。

于 2013-11-05T12:48:32.817 に答える
0

コメントで言ったことに基づいて、1 つの列にすべての行の数が含まれている可能性があり、他の列にはケースを指定して値が表示されるだけです。

そう:

select table1.a,count(table1.b),
(select count(table2.c) from table2 where "where clause")
 from table1
于 2013-11-05T12:50:58.513 に答える