2016-10-02 85 views
-2

我爲我的出勤報告編寫了下面的查詢。除了一件事以外,一切正常。我現在在我的應用程序中有一天允許多個簽入/簽出,當我運行我的查詢時,它返回簽入,簽出,總計,簽入結帳總數。我期待的結果就像是:checkin,checkout,checkin,checkout .... total。考勤報表的SQL數據透視查詢

下面是查詢:

SELECT EmployeeID, Employee, [2016-09-01],[2016-09-02],[2016-09-05],[2016-09-06],[2016-09-07],[2016-09-08],[2016-09-09] from 
       (
        SELECT src.EmployeeID, isnull(b.EmployeeName,'') +' '+ isnull(b.LastName,'') Employee 
         ,[CheckinDate] 
         , ISNULL(CAST(c.LeaveDesc as VARCHAR(max)), STUFF((
         SELECT ', ' + CAST(ISNULL(CheckinTime,'') AS VARCHAR(5)) + char(10) + CAST(ISNULL(CheckoutTime,'') AS VARCHAR(5)) + 
         char(10) + CAST(ISNULL(TotalHours,'') AS VARCHAR(5)) 
         FROM EmployeeDetail 
         WHERE (EmployeeID = src.EmployeeID and CheckinDate = src.CheckinDate) 
         FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)') 
         ,1,2,'')) AS Result 
         FROM [EmployeeDetail] as src inner join EmployeeMaster b on src.EmployeeID = b.EmployeeID and src.KindergardenID = b.KindergardenID 
         left outer join leavetype c on src.leaveid = c.leaveid 
         WHERE src.KindergardenID = 1 
         GROUP BY src.EmployeeID, isnull(b.EmployeeName,'') +' '+ isnull(b.LastName,''), CheckinDate,LeaveDesc 
      ) x 
       pivot 
       (
        max(Result) 
        for CheckinDate in ([2016-09-01],[2016-09-02],[2016-09-05],[2016-09-06],[2016-09-07],[2016-09-08],[2016-09-09]) 
      ) p 

在更改查詢,使其按預期任何幫助表示讚賞。 讓我知道如果我在詢問時感到困惑。

+0

的Microsoft SQL Server 2012 – Anjum

+0

請提供上輸入一些數據樣本,查詢結果你現在越來越和輸出什麼,你真正想要得到的。 – gofr1

+0

您能提供輸入和輸出樣本數據嗎? –

回答

0
SELECT EmployeeID, Employee, ' + @cols + ' from 
       (
        SELECT src.EmployeeID, isnull(b.EmployeeName,'''') +'' ''+ isnull(b.LastName,'''') Employee 
         ,[CheckinDate] 
         , ISNULL(CAST(c.LeaveDesc as VARCHAR(max)), isnull(left(convert(time,DATEADD(minute,(SUM(DATEDIFF(MINUTE, ''0:00:00'', TotalHours))),0)),5),''N/A'') + char(10) + STUFF((
         SELECT '', '' + CAST(ISNULL(CheckinTime,'''') AS VARCHAR(5)) + ''-'' + CAST(ISNULL(CheckoutTime,'''') AS VARCHAR(5)) + 
         char(10) 
         FROM EmployeeDetail 
         WHERE (EmployeeID = src.EmployeeID and CheckinDate = src.CheckinDate) 
         FOR XML PATH(''''),TYPE).value(''(./text())[1]'',''VARCHAR(MAX)'') 
         ,1,2,'''')) AS Result 
         FROM [EmployeeDetail] as src inner join EmployeeMaster b on src.EmployeeID = b.EmployeeID and src.KindergardenID = b.KindergardenID 
         left outer join leavetype c on src.leaveid = c.leaveid 
         WHERE src.KindergardenID = ' + CAST(@kindergardenid as varchar(max)) + ' 
         GROUP BY src.EmployeeID, isnull(b.EmployeeName,'''') +'' ''+ isnull(b.LastName,''''), CheckinDate,LeaveDesc 
      ) x 
       pivot 
       (
        max(Result) 
        for CheckinDate in (' + @cols + ') 
      ) p