使用CountDistinct聚合函数基于表达式对数据进行分组

时间:2014-04-15 15:06:15

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

我是Stack overflowSQL server reporting services的新手。所以请原谅我的问题格式。

情况就是这样:

我正在开发一份SSRS报告,需要按照不同的产品名称进行分组,如下所示。

我使用表达式

创建了一个名为 ProdCount 的文本框
COUNTDISTNCT(Fields!Product.value,"DataSet1") 

给出了 DataSet1 范围内的计数63。

现在我需要通过获取上述公式为>1的产品名称对数据进行分组。

=IIF(ProdCount>1,Fields!Product.value,Nothing)

我的问题:

  1. 我试图从计算字段调用ProdCount,因为我 无法使用计算字段中的聚合函数并使用 第二个表达式使用

    = ReportItems!ProdCount.value

    给我一​​个错误 FieldValue拒绝ReportItems

  2. 我尝试通过

    创建计算字段来组合上述两个表达式

    IIF(!CountDistinct(字段Product.Value,"数据集1")>!1,字段Product.Value,为Nothing)
    这给了我一个错误计算字段不能有表达式

  3. 我尝试使用报告变量,方法与上述(1)相同,但也没有。

  4. 我还尝试在查询中使用CROSS JOIN

  5.   

    选择计数(不同(产品名称)
        来自 Query1
        交叉连接
        我的主要查询,它为我提供了数据

    这需要更多时间来执行。

    所以任何人都可以帮我解决方案,我可以通过组合上述两个表达式对数据进行分组。

    请原谅我的格式。我对框架问题感到困惑。我接受你所有的编辑,以便我将来可以学习。

    这是我的代码:

        SELECT * FROM 
    
    --Query1 which counts the number of distinct products) 
    (SELECT DISTINCT COUNT(gproduct.ProductName) AS ProdCount
     FROM Table1 
     LEFT JOIN Table4
      ON Table1.column=Table1.column
     LEFT JOIN Table2
      ON Table3.Column = TTable1.Column
     LEFT JOIN
     (
        SELECT Distinct Table6.Name AS ProductName,Table9.ColumnId
        FROM Table6
        INNER JOIN Table7
         ON Table6.Column=Table7.Column
        INNER JOIN Table8
         ON Table7.Column=Table8.Column
        INNER JOIN Table9 
         ON Table9.Column=Table8.Column
     )gproduct
      ON Table1.ColumnId=gproduct.ColumnId
     GROUP BY gproduct.ColumnId,
    )qProduct
    CROSS JOIN
    --My main Query which get data from different table including Product name
    (SELECT
    
           Upper(CASE WHEN (CASE WHEN Table4.Column =1 THEN 'Yes' ELSE 'NO' END)='YES' 
               THEN gab.ProductName
          ELSE
               Table2.productName
          END) AS Product, 
    FROM Table1 AS ec
    LEFT JOIN Table2 AS ep 
      ON --
    LEFT JOIN Table3 AS ebrd
     ON --
    Left JOIN Table4 AS etpc
      ON --
    LEFT  JOIN Table5 AS gst 
      ON --
    LEFT JOIN
    ( 
     SELECT Distinct Table6.Name AS ProductName,Table9.ColumnId
        FROM Table6
        INNER JOIN Table7
         ON Table6.Column=Table7.Column
        INNER JOIN Table8
         ON Table7.Column=Table8.Column
        INNER JOIN Table9 
         ON Table9.Column=Table8.Column
    ) gab
    ON Table1.ColumnId=gab.ColumnId
    )QMain
    

1 个答案:

答案 0 :(得分:0)

就个人而言,我会尝试在查询本身而不是SSRS报告中解决问题。根据您提供的数据,它将类似于:

SELECT
ProductName,
count(distinct Product)
from
YourTable
group by 
ProductName
having count(distinct product) > 1

稍后创建SSRS报告应该相当容易。