簡體   English   中英

如何在SQL Server中獲取給定日期范圍的不同值

[英]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

SQL小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM