SQL统计需求:仅计数Bags/Boxes数值>0的设施(站点访问)
解决方案
要实现只统计Bags或Boxes数值大于0的站点,你需要在查询中添加数值过滤条件,同时确保每个站点只被计数一次。
1. 核心修改思路
- 过滤掉数值为0的记录(添加
WHERE条件) - 对处理后的站点名称去重,避免同一站点因Bags和Boxes都大于0被重复计数
2. 具体SQL实现
假设你的WOCUSTFIELD表中有存储Bags/Boxes数值的字段(比如custfieldvalue),可以用以下查询:
统计单日期的有效站点数量
SELECT COUNT(DISTINCT CASE WHEN wocustfield.custfieldname LIKE '%bags%' THEN REPLACE(wocustfield.custfieldname, 'bags:', '') ELSE REPLACE(wocustfield.custfieldname, 'boxes:', '') END) AS ValidFacilityCount FROM WOCUSTFIELD JOIN WORKORDER ON WOCUSTFIELD.WORKORDERID = WORKORDER.WORKORDERID WHERE wocustfield.custfieldvalue > 0 AND WORKORDER.ACTUALFINISHDATE = '2023-01-01'; -- 指定目标日期
按日期统计每日有效站点数量
如果需要批量统计每日数据,可以按日期分组:
SELECT WORKORDER.ACTUALFINISHDATE, COUNT(DISTINCT CASE WHEN wocustfield.custfieldname LIKE '%bags%' THEN REPLACE(wocustfield.custfieldname, 'bags:', '') ELSE REPLACE(wocustfield.custfieldname, 'boxes:', '') END) AS ValidFacilityCount FROM WOCUSTFIELD JOIN WORKORDER ON WOCUSTFIELD.WORKORDERID = WORKORDER.WORKORDERID WHERE wocustfield.custfieldvalue > 0 GROUP BY WORKORDER.ACTUALFINISHDATE ORDER BY WORKORDER.ACTUALFINISHDATE;
3. 逻辑说明
WHERE wocustfield.custfieldvalue > 0:直接排除所有数值为0的Bags/Boxes记录,只保留有实际访问的条目COUNT(DISTINCT ...):确保同一站点即使同时有Bags和Boxes大于0,也只会被计数一次,最终得到正确的站点数量(示例中为3个)
内容的提问来源于stack exchange,提问作者lowsparked
相关产品推荐
相关产品推荐

