Sql-Server
Reportviwer 矩陣顯示一年中的所有月/週
我是新來的,我有一個情況。我需要更改我之前創建的一份報告,該報告顯示了維護計劃。但並非所有月/週都已定義計劃,即使在這種情況下,我也想顯示所有月/週。我去獲取數據的表有一個月列和一個名為周的列,矩陣列組在月,第二組在周。
我向您展示了我所做的事情以及結果的圖像。
這是查詢:
選擇 [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 值的方式。