0

私はテーブルを持っています

employeeid WorkedDate Hours
   1        1/1/2013  8
   1        1/2/2013  8
   1        1/3/2013  8
   2        1/4/2013  8
   2        1/5/2013  8
   2        1/6/2013  8
   3        1/7/2013  8
   3        1/8/2013  8
   3        1/9/2013  8

以下のような出力が必要です

   EmployyeCount    WorkedDate    TotalHours 
        1           1/1/2013           72
        0           1/2/2013           0
        0           1/3/2013           0
        1           1/4/2013           0
        0           1/5/2013           0
        0           1/6/2013           0
         1          1/7/2013           0
         0          1/8/2013           0
         0          1/9/2013           0

ここで月または年でグループ化したくありません。上記のようにアウトプットすることは可能ですか?助けてください

4

2 に答える 2

1

あなたが本当に欲しいものを理解するのは難しいですが、望ましい出力から推測すると、私見はあなたがGROUP BYデートする必要があるだけです

SELECT COUNT(employeeid) EmployeeCount,
       CAST(WorkedDate AS DATE) WorkedDate,
       SUM(Hours) Hours
  FROM Table1
 WHERE WorkedDate BETWEEN '2013-01-02' AND '2013-01-03'
 GROUP BY CAST(WorkedDate AS DATE)

このようなサンプルデータがあると仮定します

| EMPLOYEEID | WORKEDDATE | HOURS |
-----------------------------------
|          1 | 2013-01-01 |     8 |
|          1 | 2013-01-02 |     8 |
|          1 | 2013-01-03 |     8 |
|          2 | 2013-01-01 |     8 |
|          2 | 2013-01-02 |     8 |
|          2 | 2013-01-03 |     8 |
|          3 | 2013-01-01 |     8 |
|          3 | 2013-01-02 |     8 |
|          3 | 2013-01-03 |     8 |

このクエリは、次の出力を提供します

| EMPLOYEECOUNT | WORKEDDATE | HOURS |
--------------------------------------
|             3 | 2013-01-02 |    24 |
|             3 | 2013-01-03 |    24 |

ここにsqlfiddleの例があります

于 2013-03-07T07:22:40.890 に答える
0

これを試して。ただし、これを一般化する必要がある場合があります。要件が明確でないため、できませんでした。

;with cte1 as
(select min(workeddate) MIN_date from test group by employeeid),

cte2 as 
(select min_date  min_date from cte1
 except
 select min(min_date)from cte1)


select * from 
(select 1 EID,min(min_date) WORKDATE ,(select sum(hours) from test)Hours from cte1

union 

select 1,min_date , 0 from cte2
union
select 0,workeddate,0 from test where workeddate not in
    (select min_date from cte1))a
order by workdate

SQL フィドル

于 2013-03-07T07:54:32.347 に答える