仅当行组的总和大于0时才显示行

时间:2014-02-06 10:52:41

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

我有一张如下表所示的表格。我想将此数据提供给SSRS(由LineID分组,产品和列为小时),以仅显示HourCount>的那些行。每个LineID和产品都为0。

LineID  Product Hour    HourCount
3   A   0   0
3   A   1   0
3   A   2   0
3   A   3   0
3   A   4   0
3   A   5   0
3   B   0   65
3   B   1   56
3   B   2   45
3   B   3   34
3   B   4   43
3   B   5   45
4   A   0   54
4   A   1   34
4   A   2   45
4   A   3   44
4   A   4   55
4   A   5   44
4   B   0   0
4   B   1   0
4   B   2   0
4   B   3   0
4   B   4   0
4   B   5   0
5   A   0   45
5   A   1   77
5   A   2   66
5   A   3   55
5   A   4   0
5   A   5   0
5   B   0   0
5   B   1   0
5   B   2   45
5   B   3   0
5   B   4   0
5   B   5   0

基本上我希望这个表在SSRS之前看起来像这样:

LineID  Product Hour    HourCount
3   B   0   65
3   B   1   56
3   B   2   45
3   B   3   34
3   B   4   43
3   B   5   45
4   A   0   54
4   A   1   34
4   A   2   45
4   A   3   44
4   A   4   55
4   A   5   44
5   A   0   45
5   A   1   77
5   A   2   66
5   A   3   55
5   A   4   0
5   A   5   0
5   B   0   0
5   B   1   0
5   B   2   45
5   B   3   0
5   B   4   0
5   B   5   0

只有当任何一个Hourd的HourCount高于0时,才显示该行的产品。

是否有任何查询可以提供这些结果,或者我应该使用SSRS中的显示设置?

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

with NonZero as
(
  select *
    , GroupZeroCount = sum(HourCount) over (partition by LineID, Product)
  from HourTable
)
select LineID
  , Product
  , [Hour]
  , HourCount
from NonZero
where GroupZeroCount > 0

SQL Fiddle with demo

你当然可以在SSRS中做类似的事情,但在T-SQL级别应用它肯定更容易和直观。

答案 1 :(得分:0)

我认为你在寻找

SELECT LineID,Product,Hour,Count(Hour) AS   HourCount 
    FROM abc   
    GROUP BY LineID,Productm,Hour   HAVING Count(Hour) > 0