Sql-Server

Reportviwer 矩陣顯示一年中的所有月/週

  • July 6, 2017

我是新來的,我有一個情況。我需要更改我之前創建的一份報告,該報告顯示了維護計劃。但並非所有月/週都已定義計劃,即使在這種情況下,我也想顯示所有月/週。我去獲取數據的表有一個月列和一個名為周的列,矩陣列組在月,第二組在周。

我向您展示了我所做的事情以及結果的圖像。

在此處輸入圖像描述

這是查詢:

選擇 [dbo].[Equip_PIMP].[ID_Equip_PIMP]
, [dbo]. [Contrato]. [Contrato_ID] AS [Contrato_Nr]
,[dbo].[Customer].[Name] AS [CustomerName]
,[dbo].[機構].[名稱] AS [機構名稱]
,[dbo].[Service].[Name] AS [NameService]
,[dbo].[Brand_Team].[Name] AS [BrandName]
, [dbo]. [模板]. [名稱] AS [模型名稱]
,CASE WHEN @DIA_OU_X = 1 THEN CAST([dbo].[Equip_PIMP].[Dia] AS VARCHAR(2))
當@DIA_OU_X = 0 那麼'X'
結束為 [CEL_VALUE]
,[dbo].[Equip_PIMP].[Data_Plano]
,[dbo].[Equip_PIMP].[Execution_Date]
,[dbo].[Routine].[Name] AS [RoutineName]
, [dbo]. [Rotina]. [Tipo] AS [TipoRotina]
,[dbo].[Equip_Category].[Name] AS [NameCategory]
, CASE [dbo]. [Equip_PIMP]. [月]
當 1 時 'JANEIRO'
當 2 時 'FEVEREIRO'
當 3 時 'MARÇO'
當 4 時 'ABRIL'
當 5 時 'MAIO'
WHEN 6 THE 'JUNHO'
當 7 時 'JULHO'
當 8 時 'AGOSTO'
當 9 時 'SETEMBRO'
當 10 時 'OUTUBRO'
當 11 歲時,“十一月”
12 歲時 'DEZEMBRO'
END AS [Mes_Nome] -- 這是 MONTHNAME
,[dbo].[設備].[設備 ID]
,[dbo].[設備].[名稱]
,[dbo].[設備].[品牌]
,[dbo].[設備].[型號]
,[dbo].[設備].[類別]
,[dbo].[設備].[Num_Series]
,[dbo].[設備].[Num_Inventory]
,[dbo].[設備].[Num_Equipment]
, [dbo]. [Equip_PIMP]. [直徑]
,[dbo].[Equip_PIMP].[Semana] -- 這是 WEEKNUMBER
,[dbo].[Equip_PIMP].[Mes] -- 這是 MONTHNUMBER
, [dbo]. [PIMP_Team]. [季度]
, [dbo]. [Equip_PIMP]. [學期]
, [dbo]. [Equip_PIMP]. [Ano]
從 ...

在高水平:

創建一個臨時表(也可以使用子查詢或 CTE,這取決於您),其中包含您要顯示的周數及其相應的月數。

然後修改您的查詢如下:

SELECT b.ID_Equip_PIMP]
     ,b.[Contrato_Nr]
     ,b.[NomeCliente]
     ,b.[NomeInstituicao]
     ,b.[NomeServico]
     ,b.[NomeMarca]
     ,b.[NomeModelo]
     ,b.[VALOR_CEL]
     ,b.[Data_Plano]
     ,b.[Data_Execucao]
     ,b.[NomeRotina]
     ,b.[TipoRotina]
     ,b.[NomeCategoria]
     ,CASE a.[Mes] 
           WHEN 1 THEN 'JANEIRO' 
           WHEN 2 THEN 'FEVEREIRO' 
           WHEN 3 THEN 'MARÇO' 
           WHEN 4 THEN 'ABRIL' 
           WHEN 5 THEN 'MAIO' 
           WHEN 6 THEN 'JUNHO' 
           WHEN 7 THEN 'JULHO' 
           WHEN 8 THEN 'AGOSTO' 
           WHEN 9 THEN 'SETEMBRO' 
           WHEN 10 THEN 'OUTUBRO' 
           WHEN 11 THEN 'NOVEMBRO' 
           WHEN 12 THEN 'DEZEMBRO' 
      END AS [Mes_Nome]
     ,b.[ID_Equipamento]
     ,b.[Nome]
     ,b.[Marca]
     ,b.[Modelo]
     ,b.[Categoria]
     ,b.[Num_Serie]
     ,b.[Num_Inventario]
     ,b.[Num_Equipamento]
     ,b.[Dia]
     ,a.[Semana]
     ,a.[Mes]
     ,b.[Trimestre]
     ,b.[Semestre]
     ,b.[Ano]
 FROM #temp_table a
        LEFT OUTER JOIN (
                         /*  Place entire current query here, except ORDER BY  */
                        ) b ON (a.Mes = b.Mes AND a.Semana = b.Semana)
ORDER BY /* place current query's ORDER BY here */
;

臨時表將確保您每周至少有一行;但是,如果該週沒有實際數據,則除周和月之外的所有相關值都將為 NULL。

您可能需要在報告方面進行調整,具體取決於處理 NULL 值的方式。

引用自:https://dba.stackexchange.com/questions/178175