SQL报表单数据集查三表打印机数据 @type参数筛选异常求助
问题根因
- 单数据集场景下,报表引擎默认只会读取多条并列SELECT语句中第一条查询返回的结果集,后续查询的返回值会被直接忽略,这就是本地打印机数据始终不展示的核心原因。
- 原有查询完全没有加入对
@type报表参数的过滤逻辑,参数选择不会对查询结果产生任何影响。
修复代码
用UNION ALL将两类打印机的查询合并为结构统一的单结果集,同时加入参数匹配逻辑,注意两个子查询的输出字段数量、对应字段的数据类型必须完全对齐,排序逻辑统一放到最外层处理:
SELECT ResourceID, Netbios_Name, PrinterName, PrinterServer, PrinterLocation, PrinterDriver, Timestamp, Type FROM ( -- 网络打印机数据查询 SELECT V_GS_NETWORKPRINTERS0.ResourceID, DEV.Netbios_Name0 AS Netbios_Name, PrinterQueue0 AS PrinterName, PrintServer0 AS PrinterServer, PrinterLocation0 AS PrinterLocation, PrinterDriver0 AS PrinterDriver, DateInventoried0 AS Timestamp, 'Network Printer' AS Type FROM V_GS_NETWORKPRINTERS0 LEFT JOIN v_R_System_Valid DEV ON DEV.ResourceID = V_GS_NETWORKPRINTERS0.ResourceID UNION ALL -- 本地打印机数据查询 SELECT ResourceID, SystemName0 AS Netbios_Name, Caption0 AS PrinterName, SystemName0 AS PrinterServer, SystemName0 AS PrinterLocation, DriverName0 AS PrinterDriver, TimeStamp AS Timestamp, 'Local Printer' AS Type FROM V_GS_PRINTER_DEVICE ) AS AllPrinterData WHERE Type = @type ORDER BY Netbios_Name, PrinterName
注意事项
- 确认报表参数
@type的下拉选项值和SQL语句中写的Network Printer、Local Printer完全一致,不要存在前后空格、拼写差异,否则会出现过滤失效的问题。 - 不要在UNION ALL包裹的两个子查询内部单独写ORDER BY语句,排序统一在最外层查询执行即可,避免语法报错。
- 如果后续需要同时展示两类打印机,可以给参数加一个"All"选项,对应把WHERE条件改成
WHERE Type = @type OR @type = 'All'即可。
内容的提问来源于stack exchange,提问作者Chandra Maroutu
相关产品推荐
相关产品推荐

