2013-11-25 33 views
0

我有這樣的SQL我在SQL Server Management Studio中創建:如何執行執行(@variable)在SSRS(或可這甚至做)

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和數據集下,我只看到我給沒有列數據集的名稱:

enter image description here

有沒有什麼辦法讓這個在SSRS工作,還是我尋找另一種方式來實現這一目標?

謝謝!

回答

0

我找到了解決辦法和改進我的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 

和它的工作就像一個魅力。

0

您將會努力爭取SSRS數據集字段的動態定義。根據您的要求,我會嘗試解決一些固定的列名返回,並始終返回這些,有或沒有數據。

獲得動態SQL運行並不是什麼大問題。這是返回的將會拋出SSRS的字段的動態性質。 (固定的列名也會使報告更容易設計。)

很難說不知道您的需求的細節,但它看起來像你試圖做太多的查詢;讓SSRS執行一些工作:如果您刪除pivot函數,我懷疑您的查詢在Matrix report中可以正常工作:您可以在SSRS中轉發數據,並在報告級別爲每週提供單獨的列。

+0

我有一個很好的小查詢,返回給定周內報告少於40小時的人。用戶想要爲此添加日期範圍,因此我必須弄清楚如何獲得日期範圍的每週總計,因此是關鍵點。 –

+0

您仍然可以將其添加到查詢中,將日期作爲參數提交。 –

相關問題