Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在同一个GridView中按天显示两周?_Sql_Sql Server 2008_Pivot Table_Common Table Expression - Fatal编程技术网

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请查看更新。我今天带来了数据通信。同一个别名不能有两次,你必须在演示层解决这个问题。我尝试了你的实现,但没有成功。。我知道我可以按照你的建议做。。。您能告诉我如何在我的查询中集成您的实现吗?