[英]Grouping SSRS report on multiple fields
我有一個報告,我們將稱之為 ReportOne,在這個 ReportOne 中,我使用存儲過程查詢此報告的數據。 存儲過程查詢返回兩個值,即“TravelDate”和“Status”。
我的報告有四個字段,“BeginDate”、“EndDate”、“Status”和“Days”。
我的問題是,我需要按“狀態”和連續天數對報告進行分組。 來自 TravelDate 的連續天數。
'BeginDate' 將是第一個新日期
'EndDate' 將是最后一個連續日期。
“狀態”將是狀態。
“天”將是連續天數。
例子,
TravelDate | Status
1/1/2001 | Leave
1/2/2001 | Leave
1/3/2001 | Leave
1/5/2001 | Leave
1/6/2001 | Travel
報告將如下所示。
BeginDate | EndDate | Status | Days
1/1/2001 | 1/3/2001 | Leave | 3
1/5/2001 | 1/5/2001 | Leave | 1
1/6/2001 | 1/6/2001 | Travel | 1
例子
Declare @YourTable Table ([TravelDate] date,[Status] varchar(50))
Insert Into @YourTable Values
('1/1/2001','Leave')
,('1/2/2001','Leave')
,('1/3/2001','Leave')
,('1/5/2001','Leave')
,('1/6/2001','Travel')
Select BeginDate=min(TravelDate)
,EndDate =max(TravelDate)
,Status =max(Status)
,Days =datediff(DAY,min(TravelDate),max(TravelDate))+1
From (
Select *
,Grp = DateDiff(DAY,'1900-01-01',TravelDate) - row_number() over (partition by status order by TravelDate)
From @YourTable
) A
Group By Grp
Order By BeginDate
退貨
BeginDate EndDate Status Days
2001-01-01 2001-01-03 Leave 3
2001-01-05 2001-01-05 Leave 1
2001-01-06 2001-01-06 Travel 1
編輯——從存儲過程中捕獲——@YourTable 結構必須與存儲過程的結構相匹配
Declare @YourTable Table ([TravelDate] date,[Status] varchar(50))
Insert Into @YourTable
Exec youStoredProcedure
Select BeginDate=min(TravelDate)
,EndDate =max(TravelDate)
,Status =max(Status)
,Days =datediff(DAY,min(TravelDate),max(TravelDate))+1
From (
Select *
,Grp = DateDiff(DAY,'1900-01-01',TravelDate) - row_number() over (partition by status order by TravelDate)
From @YourTable
) A
Group By Grp
Order By BeginDate
編輯 - 嵌套子查詢
Select BeginDate=min(TravelDate)
,EndDate =max(TravelDate)
,Status =max(Status)
,Days =datediff(DAY,min(TravelDate),max(TravelDate))+1
From (
Select *
,Grp = DateDiff(DAY,'1900-01-01',TravelDate) - row_number() over (partition by status order by TravelDate)
From (
-- Your Query Here ---
) A
) A
Group By Grp
Order By BeginDate
編輯 - 從 TVF 消耗
Select BeginDate=min(TravelDate)
,EndDate =max(TravelDate)
,Status =max(Status)
,Days =datediff(DAY,min(TravelDate),max(TravelDate))+1
From (
Select *
,Grp = DateDiff(DAY,'1900-01-01',TravelDate) - row_number() over (partition by status order by TravelDate)
From [dbo].[YourTableValedFunction](Param1,Param2) src
) A
Group By Grp
Order By BeginDate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.