Sql server 如何在SSRS中执行(@variable)(甚至可以这样做)
我在SQL Server Management Studio中创建了以下SQL: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
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。您仍然可以将其添加到查询中,并将日期作为参数提交。