Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 显示带有空白字段的周日历_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 显示带有空白字段的周日历

Sql 显示带有空白字段的周日历,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正试图创建一份报告,列出一周内所有168小时的时间段,供人们注册。下面的查询列出了用户已填写的基本数据,但我希望看到未注册的插槽 提前谢谢 SELECT p.[FirstName] , p.[LastName] , ( SELECT TOP 1 [Value] FROM [AttributeValue] av INNER JOIN [Attribute] a ON a.[Id] = av.[AttributeId]

我正试图创建一份报告,列出一周内所有168小时的时间段,供人们注册。下面的查询列出了用户已填写的基本数据,但我希望看到未注册的插槽

提前谢谢

    SELECT
      p.[FirstName]
    , p.[LastName]
    , ( SELECT TOP 1 [Value]
        FROM [AttributeValue] av
        INNER JOIN [Attribute] a ON a.[Id] = av.[AttributeId] 
        AND a.[EntityTypeId] = 113 
        AND a.[EntityTypeQualifierColumn] = 'WorkflowTypeId' 
        AND a.[EntityTypeQualifierValue] = w.[WorkflowTypeId]
        WHERE [EntityId] = w.[Id] 
        AND a.[Key] = 'DayOfTheWeek'
      ) AS [Day]
    , (SELECT TOP 1 [Value]
        FROM [AttributeValue] av
        INNER JOIN [Attribute] a ON a.[Id] = av.[AttributeId] 
        AND a.[EntityTypeId] = 113 
        AND a.[EntityTypeQualifierColumn] = 'WorkflowTypeId' 
        AND a.[EntityTypeQualifierValue] = w.[WorkflowTypeId]
        WHERE [EntityId] = w.[Id] 
        AND a.[Key] = 'Time'
      ) AS [Time]
FROM
[Workflow] w
INNER JOIN [PersonAlias] pa ON pa.Id = w.[InitiatorPersonAliasId]
INNER JOIN [Person] p ON p.[Id] = pa.[PersonId] 
WHERE w.[WorkflowTypeId] = 1032

您可以构建一周中日期之间的所有时间,然后可以与当前查询进行左连接,以获取所有未使用的插槽

declare @startDate datetime ='2014-11-23'
declare @endDate  datetime ='2014-11-30'

;with cte
as
(
  your current query
)
, cte1
as
(
select datename(WEEKDAY, @startDate) as [day], datepart(hour, @startdate) as [time], 
       dateadd(hour, datediff(hour, 0, @startDate)+1, 0) as nextVal
union all
select datename(WEEKDAY, nextVal) as [day], datepart(hour, nextVal) as [time],
       dateadd(hour, datediff(hour, 0, nextVal)+1, 0) as nextVal
from cte1
where nextVal<@endDate
)
select * from cte1
left join cte
on cte.day = cte1.day
and cte.time = cte1.time
OPTION (MAXRECURSION 168)
要获得所有不单独使用的插槽,可以添加cte.day为空的条件