Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/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 server 如何在SSRS中执行(@variable)(甚至可以这样做)_Sql Server_Reporting Services - Fatal编程技术网

Sql server 如何在SSRS中执行(@variable)(甚至可以这样做)

Sql server 如何在SSRS中执行(@variable)(甚至可以这样做),sql-server,reporting-services,Sql Server,Reporting Services,我在SQL Server Management Studio中创建了以下SQL: Select @query = 'Select LastName, FirstName, ' + @weekNumbersNull + ' from ( Select LastName, FirstName, Hours, ''Week'' + Case When DatePart(Weekday, Date) = 1 Then C

我在SQL Server Management Studio中创建了以下SQL:

Select @query =  'Select LastName, FirstName, ' + @weekNumbersNull + '
from (
             Select LastName, FirstName, Hours, ''Week'' + 
             Case When DatePart(Weekday, Date) = 1 
             Then Cast(DatePart(ww, Date - 6) as nvarchar(max))
             Else Cast(DatePart(ww, Date - DatePart(Weekday, Date) + 2) as nvarchar(max))
             End WeekNo
             From Entry
             Where Date between ''11/1/2013'' and ''11/30/2013'') alpha
             pivot (
             sum(Hours)
             for WeekNo in (' + @weekNumbers + ')
             ) p 
             order by LastName, FirstName'
execute(@query)
为了简洁起见,我省略了定义所有变量的SQL。 当我在那里运行它时,我会得到结果。因此,我将此SQL移植到SSRS,在“数据集”下,我只看到我给数据集的名称,没有列:

有没有办法让它在SSRS中发挥作用,或者我必须寻找另一种方法让它发挥作用


谢谢

要像这样动态定义SSRS数据集字段,您将面临一场艰苦的战斗。根据您的要求,我将尝试确定要返回的一组固定列名,并始终返回这些列名,无论是否包含数据

让动态SQL运行并不是什么大问题。返回的字段的动态特性将抛出SSR。固定的列名也将使报表更易于设计


在不了解需求细节的情况下很难说,但看起来您在查询中做的太多了;让SSR做一些工作:如果您删除pivot函数,我怀疑您的查询在a中会工作得很好:您可以在SSR中透视数据,并在报告级别每周有单独的列。

我找到了一个解决方案并修改了我的SQL:

Declare @WeekStart DateTime
Declare @WeekEnd DateTime

Select @WeekStart = @DerivedStartDate
Select @WeekEnd = DateAdd("dd", 6, @WeekStart)

Create Table #TempTable (WeekOf DateTime, LastName nvarchar(max), FirstName nvarchar(max), Hours numeric)

While @WeekStart < @DerivedEndDate Begin
   Insert into #TempTable
   Select @WeekStart week, LastName, FirstName, 
      (
          Select sum(Hours) 
          From Entry x
          Where x.Date between @WeekStart and @WeekEnd and x.uuid = entry.uuid
       ) as TotalHours
   From Entry
   Where (
      Select sum(Entry2.Hours) From Entry as Entry2
      Where Entry2.UUID = Entry.UUID and Entry2.Date Between @WeekStart and @WeekEnd) < 40
   Or not exists 
   (
      Select 1 From Entry as Entry2
      Where Entry2.UUID = Entry.UUID and Entry2.Date Between @WeekStart and @WeekEnd
   )  
   Group By LastName, FirstName, uuid

   Select @WeekStart = DateAdd(dd, 1, @WeekEnd)
   Select @WeekEnd = DateAdd(dd, 7, @WeekEnd)
End

Select * from #TempTable
Order by WeekOf, LastName, FirstName
Delete #TempTable
Drop Table #TempTable

它就像一种魅力。

我有一个很好的小查询,返回了在给定的一周内报告少于40小时的人。一个用户想在这个查询中添加一个日期范围,所以我必须弄清楚如何获得一个日期范围的每周总计,从而得到pivot。您仍然可以将其添加到查询中,并将日期作为参数提交。