2016-10-12 7 views
0

私は以下のクエリを得て、EAMATTNSTATUS = 7または8を0.5として、EAMATTNSTATUS = 6をEAMATTNSTATUS = 6としてEAMDATEを数えたいとします。重複なしで数える方法は?


SELECT EAMEMID, 
      SUM(CASE WHEN EAMATTNSTATUS in (7) OR EAMATTNSTATUS in (8) THEN 1 ELSE 0 END)/2 + COUNT(DISTINCT CASE WHEN EAMATTNSTATUS in (6) THEN EAMDATE END) as ABSENTDAYS 
    FROM viewDAILYSUM 
    WHERE (EAMEMID = :EAMEMID) AND 
      (EAMDATE between :FDate and :TDate) 
    GROUP BY EAMEMID                          
    ORDER BY EAMEMID 

私にとっては困難な部分、1 EAMDATEはEAMATTNSTATUS = 7または8の状態とEAMATTNSTATUS = 6を有することができることが、このいくつかの状況という。つまり、2つのステータスを持つため、そのEAMDATEのカウントを2回複製します。

どのように私は重複を修正することができますか?

私が個別に使用しようとしたが、それは仕事をdidntの...

任意のアイデア??!

おかげで申し訳

SAMPLE DATA 
    EAMEID | EAMDATE | EAMATTNSTATUS| 
    ------ | --------| -------------| 
    161 |20/7/2016| 6   | 
    161 |20/7/2016| 7   | 
    161 |21/7/2016| 6   | 
    161 |22/7/2016| 5   | 
    161 |23/7/2016| 8   | 
CURRENT OUTPUT 

EAMEID | EAMDATE | ABSENTDAYS | 
------ | --------| -------------| 
161 |20/7/2016| 1   | 
161 |20/7/2016| 0.5   | 
161 |21/7/2016| 1   | 
161 |22/7/2016| 0   | 
161 |23/7/2016| 0.5   | 

WANTED RESULT 

EAMEID | EAMDATE | ABSENTDAYS | 
------ | --------| -------------| 
161 |20/7/2016| 0.5   | 
161 |21/7/2016| 1   | 
161 |22/7/2016| 0   | 
161 |23/7/2016| 0.5   | 
+0

サンプルデータと予想される結果..こんにちは –

+0

私にはトリッキーな質問のように見える、私は,,あなたのコメントを待って、必要な情報を追加したおかげ – Majed

答えて

0

あなたのニーズ何(私にとっては)明確ではありません。なぜABSENTDAYSたとえば あなたは私が意味する

EAMEID | EAMDATE | EAMATTNSTATUS| 
------ | --------| -------------| 
161 |20/7/2016| 6   | 
161 |20/7/2016| 7   | 

から始まっ

EAMEID | EAMDATE | ABSENTDAYS | 
------ | --------| -------------| 
161 |20/7/2016| 0.5   | 

を持って適用する必要がロジック...は0.5と1でありませんか?クエリに適用する必要があるロジックは何ですか?

+0

empoyeeカテゴリ8または7に該当するとき、彼は1を有することを意味しますその日にパンチ。私は彼が半日だけ欠席していると数えたいと思う。現在の出力は、彼が論理的ではないその日に1.5のために欠席していることを示しています...助けてくれることを願う – Majed

+0

申し訳ありません。私はあなたの質問に必要なロジックが何であるかまだ分かりません。 別のEAMATTNSTATUS 6と7の同じユーザー(161)と同じ日(20/7/2016)の2つのレコードがあります。 6 = 1(ABSENTDAYS)と7 = 0.5(ABSENTDAYS)ですが、 1から0.5の間で選択する必要があります それは明確ではありません。 2011年20月7日の日とユーザ161では、これらの2つの値があることを考慮して、0.5または1を選択する方法はありますか? – ste

0

クエリをサブクエリとして使用してグループ化することができます。

SELECT EAMEMID, EAMDATE, MIN(ABSENTDAYS) MINABSENT FROM (SELECT EAMEMID,EAMDATE, 
     SUM(CASE WHEN EAMATTNSTATUS in (7) OR EAMATTNSTATUS in (8) THEN 1 ELSE 0 END)/2 + COUNT(DISTINCT CASE WHEN EAMATTNSTATUS in (6) THEN EAMDATE END) as ABSENTDAYS 
FROM viewDAILYSUM 
WHERE (EAMEMID = :EAMEMID) AND 
     (EAMDATE between :FDate and :TDate) 
GROUP BY EAMEMID                         
ORDER BY EAMEMID) 
GROUP BY EAMEMID, EAMDATE 
+0

こんにちは、ありがとう。しかし、それは動作していません... – Majed

+0

私はSQLを変更しました。 Plsは今チェックします。 –