【发布时间】:2017-02-10 10:53:08
【问题描述】:
我为我的出勤报告编写了以下查询。除了一件事,一切都很好。现在,当我运行查询时,我的应用程序一天内允许多次签入/签出,它返回签入、签出、总计、签入结帐总计。我期望的结果是:签入,签出,签入,签出......总计。
下面是查询:
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
感谢您在更改查询以使其按预期工作方面的任何帮助。 让我知道我是否在询问时感到困惑。
【问题讨论】:
-
微软 sql server 2012.
-
请提供一些关于输入的数据样本、您现在获得的查询结果以及您实际想要获得的输出。
-
能否提供输入输出样本数据?
-
你已经完成了第二步。你错过了第一步。首先使用 CTE 进行查询,在哪里处理签入、签出并给你想要的结果。然后使用 CTE,使查询枢轴。我认为这个查询将是动态的。
标签: sql sql-server tsql sql-server-2012 pivot