Sql 如何在同一个GridView中按天显示两周?
我使用此查询来获取每个员工两周的总工资周期Sql 如何在同一个GridView中按天显示两周?,sql,sql-server-2008,pivot-table,common-table-expression,Sql,Sql Server 2008,Pivot Table,Common Table Expression,我使用此查询来获取每个员工两周的总工资周期 select FullName ,[Sunday] = SUM([Sunday]) ,[Monday] = SUM([Monday]) ,[Tuesday] = SUM([Tuesday]) ,[Wednesday] = SUM([Wednesday]) ,[Thursday] = SUM([Thursday]) ,[Friday] = SUM([Friday]) ,[Saturday] = SUM([Saturday]) , Total=SUM(IS
select FullName
,[Sunday] = SUM([Sunday])
,[Monday] = SUM([Monday])
,[Tuesday] = SUM([Tuesday])
,[Wednesday] = SUM([Wednesday])
,[Thursday] = SUM([Thursday])
,[Friday] = SUM([Friday])
,[Saturday] = SUM([Saturday])
, Total=SUM(ISNULL([Sunday],0)+ISNULL([Monday],0)+ISNULL([Tuesday],0)+ISNULL([Wednesday],0)+ISNULL([Thursday],0)+ISNULL([Friday],0)+ISNULL([Saturday],0))
from
(Select UserId_Fk,ISNULL(CAST(CountHours as decimal(18,2)),0)as CountHours,[Day],CheckIn
from CheckInCheckOut)
as convertedtable
inner join Users
on convertedtable.UserId_Fk=Users.UserId
PIVOT
(
SUM(CountHours)
FOR Day
IN([Sunday],[Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday])
)
as PivotTable where CheckIn between @startdate and @enddate
GROUP BY FullName
end
输出如下:
如何更新我的查询以将其显示为:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday Monday Tuesday Wednesday Tursday Friday Saturday **Total**
数据库中的数据包括:
编辑
我有一个名为Paperiod的表格,其中列出了本年度的所有发薪期:
表的第一行是:
Monday 21 Apr 2014 - 4 May 2014
![enter image description here][3]
请举个例子。从一个查询开始,计算从支付期开始到员工工作的天数
select *,
DateDiff(day, @start_date, Day_Worked) as Day_Of_Period
from WorkHours
在本例中,新字段Day_Of_Period将是0到13之间的数字
然后根据该新字段生成透视图。这是否有帮助
SELECT
t1.FullName
,t1.[Monday]
,t1.[Tuesday]
,t1.[Wednesday]
,t1.[Thursday]
,t1.[Friday]
,t1.[Saturday]
,t1.[Sunday]
,t2.[Monday]
,t2.[Tuesday]
,t2.[Wednesday]
,t2.[Thursday]
,t2.[Friday]
,t2.[Saturday]
,t2.[Sunday]
,(t1.Total + t2.Total) AS Total
FROM
(
SELECT FullName
,[Sunday] = SUM([Sunday])
,[Monday] = SUM([Monday])
,[Tuesday] = SUM([Tuesday])
,[Wednesday] = SUM([Wednesday])
,[Thursday] = SUM([Thursday])
,[Friday] = SUM([Friday])
,[Saturday] = SUM([Saturday])
,Total = SUM(ISNULL([Sunday], 0) + ISNULL([Monday], 0) + ISNULL([Tuesday], 0) + ISNULL([Wednesday], 0) + ISNULL([Thursday], 0) + ISNULL([Friday], 0) + ISNULL([Saturday], 0))
FROM (
SELECT UserId_Fk
,ISNULL(CAST(CountHours AS DECIMAL(18, 2)), 0) AS CountHours
,[Day]
,CheckIn
FROM CheckInCheckOut
) AS convertedtable
INNER JOIN Users ON convertedtable.UserId_Fk = Users.UserId
PIVOT(SUM(CountHours) FOR Day IN (
[Sunday]
,[Monday]
,[Tuesday]
,[Wednesday]
,[Thursday]
,[Friday]
,[Saturday]
)) AS PivotTable
WHERE CheckIn BETWEEN @startdate
AND dateadd(day, 7, @startdate)
GROUP BY FullName
) AS t1
INNER JOIN
(
SELECT FullName
,[Sunday] = SUM([Sunday])
,[Monday] = SUM([Monday])
,[Tuesday] = SUM([Tuesday])
,[Wednesday] = SUM([Wednesday])
,[Thursday] = SUM([Thursday])
,[Friday] = SUM([Friday])
,[Saturday] = SUM([Saturday])
,Total = SUM(ISNULL([Sunday], 0) + ISNULL([Monday], 0) + ISNULL([Tuesday], 0) + ISNULL([Wednesday], 0) + ISNULL([Thursday], 0) + ISNULL([Friday], 0) + ISNULL([Saturday], 0))
FROM (
SELECT UserId_Fk
,ISNULL(CAST(CountHours AS DECIMAL(18, 2)), 0) AS CountHours
,[Day]
,CheckIn
FROM CheckInCheckOut
) AS convertedtable
INNER JOIN Users ON convertedtable.UserId_Fk = Users.UserId
PIVOT(SUM(CountHours) FOR Day IN (
[Sunday]
,[Monday]
,[Tuesday]
,[Wednesday]
,[Thursday]
,[Friday]
,[Saturday]
)) AS PivotTable
WHERE CheckIn BETWEEN dateadd(day, 7, @startdate)
AND @enddate
GROUP BY FullName
) AS t2 ON t1.FullName = t2.FullName
哪个星期天是第一个星期天?是2014年05月04日至2014年05月17日的一个付款期,还是2014年05月11日至2014年05月24日的一个付款期?我很好奇你是如何填写日期栏的。例如,第一行中的所有日期均指2014-05-15,即周四,但Day列中的日期为周三。您的查询是否基于Day列的内容?还是基于其中一个日期字段?@DavidDubois请查看更新。我今天带来了数据通信。同一个别名不能有两次,你必须在演示层解决这个问题。我尝试了你的实现,但没有成功。。我知道我可以按照你的建议做。。。您能告诉我如何在我的查询中集成您的实现吗?