2016-09-29 7 views
1

同じ日付(count(TransactionDate)> 1)の複数のトランザクションを持つ従業員のみを返すSQLクエリを作成しようとしていますが、トランザクションは異なるストアIDで発生しています。私はカウントの集約と持っている組み合わせを使用しようとしていますが、正しい値を返すように見えません。一時テーブルを使用する方が良いでしょうか、それともサブクエリでしょうか?私の下の質問は正確な記録を返さない。どんな助けもありがとうございます。ありがとう!複数の条件を持つSQL Count集計

EmployeeID | StoreID | TransactionDate 
-------------------------------------- 
    1  | 1  | 2016-09-09 --should be returned 
-------------------------------------- 
    1  | 2  | 2016-09-09 --should be returned 
-------------------------------------- 
    1  | 3  | 2016-09-09 --should be returned 
-------------------------------------- 
    1  | 1  | 2016-09-18 --should not be returned 
-------------------------------------- 
    2  | 1  | 2016-09-09 --should not be returned 
-------------------------------------- 
    2  | 1  | 2016-09-09 --should not be returned 
-------------------------------------- 
    3  | 1  | 2016-09-09 --should not be returned 
-------------------------------------- 
    4  | 5  | 2016-09-09 --should be returned 
-------------------------------------- 
    4  | 6  | 2016-09-09 --should be returned 

select top 1000 EmployeeID, StoreID, TransactionDate, count(StoreID)[StoreCount], count(TransactionDate)[Transaction Count] 
from myTable 
group by EmployeeID, StoreID, TransactionDate 
having count(StoreID) > 1 and count(TransactionDate) > 1 
order by TransactionDate desc 
+2

どのrdbms? sql-sever、mysql、oracle、...?これは窓関数のための完全な例であるので、違いを生みます – Matt

答えて

1
SELECT t.* 
FROM 
    (
     SELECT 
      EmployeeId, TransactionDate 
     FROM 
      Table 
     GROUP BY 
      EmployeeId, TransactionDate 
     HAVING 
      COUNT(DISTINCT StoreId) > 1 
    ) e 
    INNER JOIN Table t 
    ON e.EmployeeId = t.EmployeeId 
    AND e.TransactionDate = t.TransactionDate 

キーは従業員& TransactionDateによってグループ化され、COUNT(DISTINCT)OVER()が許可されていません(DISTINCT StoreId)を数えることであるため、実際のウィンドウ関数は、ここでは多くの援助ではないでしょう。したがって、導出された表は進んでおり、この構文は一般的なRDBMSのほとんどすべてで動作します。

+1

完全に働いた、ありがとう! – AndrewC10

0

あなただけの従業員をしたい場合:

SELECT DISTINCT EmployeeId 
FROM myTable t 
GROUP BY EmployeeId, TransactionDate 
HAVING MIN(StoreId) <> MAX(StoreId); 

これはselect distinctgroup byで使用されている非常に少数の状況のいずれかです。したがって、このタイプのクエリはかなり特別なものです。

関連する問題