制定SSRS查询以在GROUP BY中包含零/空行

时间:2011-09-29 15:23:47

标签: sql-server reporting-services ssrs-2008

我正在处理SSRS报告,如果没有可用于所选日期范围的数据,我的工厂名称无法显示。

最左边的列,第一行(技术上是图像的第二行)是我的工厂名称应始终出现的位置:

enter image description here

enter image description here

基本上第一张图片只显示我的空行/列。第一列,第一行是我的工厂名称应始终在哪里。其余列是我根据日期选择返回的数据。

当有数据时,第二张图像会显示一切正常。

我在PlantRS中对SSRS进行分组,这是我的工厂名称。即使没有可用数据,我也不知道如何显示工厂名称。

这可能吗?

我认为我可以使用像iif(salesvolume is NOTHING, [PlantCODE],[PlantCode])

这样的东西

以下是报告的数据库查询

SELECT
    PInv.[Plant_Numer],
    PInv.[Plant_Code],
    PInv.{Department_number],
    PInv.[Inventory_Volume],
    Pinv.[Inventory_Date], -- 'Last Inventory Date'
    pls.[Actual_Volume],
    pls.[Budget_Volume],
    ppf.[Good_Output_Product_Units] AS 'Production Volume', -- 'Next Day Production
    CASE 
        WHEN coalesce (pls.[Acutal_Volume],0) = 0 and coalesce (pls.[Actual_Sales_Dollars],0) = 0 THEN 0
        ELSE ((pls.[Actual_Sales_Dollars/pls.[Actual_Volume])) AS 'Average Price' -- 'Next Day Sales'
FROM
    [TrueOpportunity].[dbo].[Production_Fact] pf
    inner join [TrueOpportunity].[dbo].[Production_Process_Fact] ppf on ppf.production_number = pf.production_number
    inner join [TrueOpportunity].[dbo].[Process] prc on prc.process_number = pf.process_number
    inner join [TrueOpportunity].[dbo].[Department] dpt on dpt.department_number = prc.department_number
    inner join [WoodProduction_New].[dbo].[Plywood_Layup_Sales] pls on pls.procesS_number = pf.procesS_number
    inner join [WoodProduction_New].[dbo].[Process_Inventory] Pinv on PInv.[Inventory_Date] = pf.date 
        and pls.product_date = pf.date 
        and dpt.department_number = pinv.department_number
WHERE
    pf.date between @BeginningDate and @EndingDate

1 个答案:

答案 0 :(得分:0)

我认为您想要更改查询,以便Process Inventory是您的主表,而所有其他表都是LEFT JOINED到该表。那样的工厂编号&无论其他表中是否存在匹配数据,代码都会显示出来。

这种语法可能不完全正确,但我首先要改变你的FROM子句,看起来像这样:

FROM
    [WoodProduction_New].[dbo].[Process_Inventory] Pinv
    LEFT JOIN [TrueOpportunity].[dbo].[Production_Fact] pf 
        ON PInv.[Inventory_Date] = pf.date
    LEFT JOIN [TrueOpportunity].[dbo].[Production_Process_Fact] ppf 
        ON ppf.production_number = pf.production_number
    LEFT JOIN [TrueOpportunity].[dbo].[Process] prc 
        ON prc.process_number = pf.process_number
    LEFT JOIN [TrueOpportunity].[dbo].[Department] dpt 
        ON dpt.department_number = prc.department_number 
        AND dpt.department_number = pinv.department_number
    LEFT JOIN [WoodProduction_New].[dbo].[Plywood_Layup_Sales] pls 
        ON pls.process_number = pf.process_number 
        AND pls.product_date = pf.date 

试验一下,看看是否可以让它显示你想要的数据。