[英]How to get Distinct values for the given date range in sql server
我有桌子
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
我不想在這里按月份或年份分組。 是否有可能像上面那樣被淘汰? 請幫忙
很難理解您真正想要的是什么,但是從期望的輸出推導出,恕我直言,您只需要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示例
嘗試這個。 但是,您可能需要對此進行概括。 我不能作為要求不清楚。
;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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.