SQL Server如何编写SQL查询实现价格数量相关标记逻辑
SQL Server 价格数量匹配标记查询方案
需求背景
基于Microsoft SQL Server编写查询,实现价格数量为10时的对应标记提取功能,核心计算与判定规则如下:
- 平均价格计算公式:
Price / PriceQuantity(即价格列除以价格数量列) - 标记判定规则:
- 同一比对维度下全部6个地点的
Price Quantity值不完全匹配时,标记为Fail - 同一比对维度下全部6个地点的
Price Quantity值完全匹配时,标记为Pass
- 同一比对维度下全部6个地点的
参考实现代码
假设存储价格数据的表为PriceInfo,表中包含商品标识字段SkuId(即跨6个地点比对的同一商品维度,可根据实际业务替换为对应字段)、地点字段LocationId、价格字段Price、价格数量字段PriceQuantity,查询语句如下:
WITH GroupCheck AS ( SELECT SkuId, -- 统计分组内价格数量的去重值数量 COUNT(DISTINCT PriceQuantity) AS DistinctPqCount, -- 计算分组平均价格,处理除零异常 AVG(Price * 1.0 / NULLIF(PriceQuantity, 0)) AS AvgPrice FROM PriceInfo -- 若需要筛选价格数量为10的场景,取消下方注释即可 -- WHERE PriceQuantity = 10 GROUP BY SkuId -- 仅保留覆盖全部6个地点的分组 HAVING COUNT(LocationId) = 6 ) SELECT p.*, gc.AvgPrice, -- 去重计数为1说明所有地点价格数量完全一致,否则判定为不匹配 CASE WHEN gc.DistinctPqCount = 1 THEN 'Pass' ELSE 'Fail' END AS Flag FROM PriceInfo p INNER JOIN GroupCheck gc ON p.SkuId = gc.SkuId;
注意事项
- 请将代码中的表名、字段名替换为实际业务环境中的对应名称
- 计算平均价格时乘
1.0是为了避免SQL Server整数除法导致的精度丢失问题 - 若业务中比对维度不是商品SKU,可将
GROUP BY后的字段替换为实际需要的维度(比如定价批次、商品分类等)
内容的提问来源于stack exchange,提问作者nlas
相关产品推荐
相关产品推荐

