2016-07-19 2 views
4

これは私の問題です。これは日焼けサロンです。私たちは最近スパサービスを追加しました。クライアントは一日で丁度時間を過ごすために従業員によって別個の顧客を数えるのはかなり簡単でした。今、彼らは1日に1回より多くの時間/スパを飲んで、いつでも異なるスタッフを見ることができます。私はdinstinctクライアントを1日に1つの数値にSUMを集計しようとしています。ここでは、クエリです。私はこれが意味をなさないことを望む。私が初めて投稿したときに私を許してください?datepart(day)と異なる個数を合計する

このクエリでは、毎日別のクライアントのカウントが生成され、どの従業員がそれらを調査したかが表示されます。 (これは正しい)私は従業員によってこれを合計する必要があります。日付部分が含まれていない場合は、日付範囲全体で明確に選択されます。

SELECT COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID 
FROM  History_TanHistory 
WHERE DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
    AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102) 
    AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0 
GROUP BY EmployeeUID, DATEPART(day, DateOfTan) 

上記のクエリは、(底部の和なし)出力のこのタイプを生成日焼け#クライアントの
EmployeeUID日
383-E11132012143712J1U 1 52
383-E11132012143712J1U 2 80
383-E11132012143712J1U 3 68
383-E11132012143712J1U 5 58
383-E11132012143712J1U 7 65
383-E11132012143712J1U 9 6 78
383-E11132012143712J1U 85
383-E11132012143712J1U 10 64
383-E11132012143712J1U 11 65
383-E11132012143712J1U 13 55
383-E11132012143712J1U 14 55
383-E11132012143712J1U 16 76
383-E11132012143712J1U 17 65
383-E11132012143712J1U 18 50
383-E11132012143712J1U 20 55
383-E11132012143712J1U 21 56
383-E11132012143712J1U 23 47
383-E11132012143712J1U 24 79
383-E11132012143712J1U 25 59
383-E11132012143712J1U 27 55
383-E11132012143712J1U 28 54
383-E11132012143712J1U 30 62

合計1383

日付構成要素が取り除かれた場合、それは全体の30日目に見え期間を1つのグループとして扱い、この従業員の個別カウントを656だけ返します。

私はそれが上記の従業員のために1383.

サンプルデータの合計値を返す必要があります。クライアントのIDはデイビーで1回以上サービスを使用することがありますが、1回だけカウントしたいだけです。

+1

いくつかのサンプル入力と所望の出力は、ここでは参考になります。 –

+0

あなたの要件はあまり明確ではなく、 'group by'自体がidとdatepartのペアを区別しているので、' count'は期待通りに動作するはずです。 – Hopeless

答えて

1

私が正しく理解している場合は、サブクエリとしてクエリをラップするだけです。

これは、合計1つの行を返します。

SELECT 
    SUM(T.[# clients]) AS TotalClients 
FROM 
(
    SELECT COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID 
    FROM  History_TanHistory 
    WHERE DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
     AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102) 
     AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0 
    GROUP BY EmployeeUID, DATEPART(day, DateOfTan) 
) AS T 

あなたは従業員一人当たりSUMをしたい場合は、単に別のGROUP BYを追加します。これはEmployeeUIDごとに1つの行を返します。

SELECT 
    T.EmployeeUID 
    ,SUM(T.[# clients]) AS ClientsPerEmployee 
FROM 
(
    SELECT COUNT(DISTINCT ClientUID) AS [# clients], DATEPART(day, DateOfTan) AS [day of tan], EmployeeUID 
    FROM  History_TanHistory 
    WHERE DateOfTan > CONVERT(DATETIME, '2016-06-01 00:00:00', 102) 
     AND DateOfTan < CONVERT(DATETIME, '2016-07-01 00:00:00', 102) 
     AND Deleted = 0 AND Borrow = 0 AND AddedBack = 0 AND CanceledTan = 0 
    GROUP BY EmployeeUID, DATEPART(day, DateOfTan) 
) AS T 
GROUP BY T.EmployeeUID 
+0

それが問題を解決しました。それは簡単だったのですが、なぜ私はそれについて考えなかったのですか?ありがとう、ウラジミール。 –

+1

あなたは大歓迎です。私の答えがあなたを助けたら、それをアップボーディングして受け入れてください。 –

関連する問題