如何在SSRS汇总表中合并统计ITEM与ITEM2字段的商品数据?
解决方案步骤
1. 修改主统计查询,合并ITEM和ITEM2字段
原来的查询只统计了ITEM字段,现在我们需要用UNION ALL把ITEM和ITEM2的所有值(包括转义后的NULL)合并成一个单列,再分组统计:
-- 主统计脚本 SELECT ItemValue AS ITEM, COUNT(*) AS TotalCount FROM ( -- 把ITEM和ITEM2拆成单独的行 SELECT ISNULL(a.ITEM, 'NULL') AS ItemValue FROM SALES AS a UNION ALL SELECT ISNULL(a.ITEM2, 'NULL') AS ItemValue FROM SALES AS a ) AS CombinedItems -- 兼容原有的参数过滤 WHERE ItemValue IN (@ITEM) GROUP BY ItemValue ORDER BY ItemValue
2. 更新SSRS参数查询,包含ITEM2的所有值
原来的参数只取了ITEM字段的去重值,现在要把ITEM2的也加进去,这样参数列表里才会出现ITEM2中的选项:
-- SSRS参数查询 SELECT DISTINCT ISNULL(a.ITEM, 'NULL') AS ITEM FROM SALES AS a UNION -- 用UNION自动去重,避免重复选项 SELECT DISTINCT ISNULL(a.ITEM2, 'NULL') AS ITEM FROM SALES AS a ORDER BY ITEM
为什么这样有效?
拿你给出的测试数据举例:
| ITEM | ITEM2 |
|---|---|
| TV | NULL |
| TV | RADIO |
| RADIO | TV |
通过UNION ALL合并后,子查询CombinedItems会生成以下行:
- TV
- NULL
- TV
- RADIO
- RADIO
- TV
如果你的参数选择了TV和RADIO(排除NULL),过滤后剩下的行就是TV, TV, RADIO, RADIO, TV,分组统计后正好得到TV-3、Radio-2的结果,完全符合你的需求。
注意事项
- 一定要用
UNION ALL而不是UNION:UNION会自动去重,会导致统计数量错误;UNION ALL保留所有原始行,才能正确计数。 - 如果不需要统计
NULL值,可以在子查询里加WHERE条件过滤,比如SELECT ISNULL(a.ITEM, 'NULL') AS ItemValue FROM SALES AS a WHERE a.ITEM IS NOT NULL,同理处理ITEM2。
内容的提问来源于stack exchange,提问作者Will F
相关产品推荐
相关产品推荐

