2015-04-28 53 views
2

我正在嘗試顯示employees的出勤記錄,特別是分支,讓我們說「浦那分支」。顯示那些數據庫中不存在日期的數據

顯示每週記錄時,它只顯示數據庫表中存在條目的日期記錄。我也想顯示那些沒有任何員工在場的日期的記錄。

假設在Log_TB有2個員工目前爲28 Apr 2015出2員工記錄,那麼就說明

Then It Shows

而且如果該日期沒有記錄則返回什麼。

我想導致像

I want result Like

這裏是我的查詢

Declare 
@Date date = GETDATE(), 
@date1 date, 
@Total int 

    set @date1 = (CONVERT(date,DATEADD(DD,-6,@Date),108)); 

    select @Total = Count(User_TB.User_Id) 
    from User_TB join Branch_TB 
    on User_TB.User_Branch = Branch_TB.Branch_Name 
    where User_TB.User_Branch = 'Pune'; 

    select convert(varchar,Log_TB.Date,106) AS Date, 
    CONVERT(CHAR(3),DATENAME(weekday,Log_TB.Date)) AS Day, 
    @Total AS Total,COUNT(Log_TB.User_Id) Present, 
    (@Total-COUNT(Log_TB.User_Id)) AS Absent 
    From Log_TB join User_TB on Log_TB.User_Id = User_TB.User_Id 
    where Log_TB.Date <= (CONVERT(date,@Date,108)) 
    and Log_TB.Date >= @date1 and User_TB.User_Branch = 'Pune' 
    group by Log_TB.Date; 

我的表定義

CREATE TABLE [dbo].[Log_TB] 
(
[User_Id] [varchar](50) NOT NULL, 
[First_Login] [time](0) NULL, 
[Logout] [time](0) NULL, 
[Date] [date] NULL, 
[Working_Hrs] [time](0) NULL, 
[extra_Int] [int] NOT NULL, 
[extra_String] [varchar](50) NULL 
) 
+0

可能的重複[在特定日期沒有找到記錄時返回resulset中的行](http://stackoverflow.com/questions/29647405/return-rows-in-a-resulset-when-沒有記錄找到特定日期) –

回答

0

你需要的是一個NumbersDate表。您可以使用這樣的事情

DECLARE @date1 DATE = '20150401',@Date DATE= GETDATE(); 
;WITH CTE AS 
(
SELECT @date1 as datecol 
UNION ALL SELECT DATEADD(day,1,datecol) FROM CTE WHERE DATEADD(day,1,datecol) <= @Date 
) 
SELECT * FROM CTE 

在查詢生成它,你會使用這樣

Declare 
@Date date = GETDATE(), 
@date1 date, 
@Total int 

set @date1 = (CONVERT(date,DATEADD(DD,-6,@Date),108)); 

select @Total = Count(User_TB.User_Id) 
from User_TB join Branch_TB 
on User_TB.User_Branch = Branch_TB.Branch_Name 
where User_TB.User_Branch = 'Pune'; 

DECLARE @date1 DATE = '20150401',@Date DATE= GETDATE(); 
;WITH CTE AS 
(
SELECT @date1 as datecol 
UNION ALL SELECT DATEADD(day,1,datecol) FROM CTE WHERE  DATEADD(day,1,datecol) <= @Date 
) 
select convert(varchar,CTE.datecol,106) AS Date, 
CONVERT(CHAR(3),DATENAME(weekday,CTE.datecol)) AS Day, 
@Total AS Total,COUNT(User_TB.User_Id) Present, 
(@Total-COUNT(User_TB.User_Id)) AS Absent 
From CTE LEFT JOIN Log_TB ON Log_TB.Log_TB.Date = CTE.datecol 
LEFT join User_TB on Log_TB.User_Id = User_TB.User_Id 
and User_TB.User_Branch = 'Pune' 
group by CTE.datecol; 
+0

這可以幫助我@ughai。但是Log_TB具有兩個分支的記錄,因爲該分支沒有記錄的那個日期提供了適當的輸出。但是,如果有一個分部的記錄,而不是另一個分支..但它顯示了另一個分支的當前記錄..你能多請多幫我一下 –

+0

嘗試更新的查詢 – ughai

+0

謝謝@ughai ...它的工作 –

0
Declare @date datetime -- its a starting date 
Set @Date = '1-Apr-2015' 


Declare @table table (date datetime) 
-- inserts data from starting date till getdate 
while @date <> convert(datetime,convert(varchar(10),getdate(),101),101) 
begin 
    insert into @table 
    select @date aa 
    select @date = @date+1 
end 

select * from @table 

剛剛加入@table和左數據加入

Select * 
from @table left join (Your data) with condition date. 
+0

你可以嘗試編輯您的答案並應用一些格式,以便每個人都清楚重要的一點 – Anton

相關問題