簡體   English   中英

對多個字段分組 SSRS 報告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM