当前位置: 代码迷 >> Sql Server >> 话语简化
  详细解决方案

话语简化

热度:41   发布时间:2016-04-24 21:10:34.0
语句简化

IF @仓库信息ID = 0
BEGIN
SELECT 
[ID]
,[编号]
,[名字]
,[别名]
,[单位]
,(SELECT SUM(商品所属仓库信息.数量) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID) AS 数量
,(SELECT AVG(商品所属仓库信息.单价) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID) AS 均价
,(SELECT SUM(商品所属仓库信息.数量 * 商品所属仓库信息.单价) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID) AS 库存金额 
FROM [商品信息] WHERE [分类] = @分类ID
END
ELSE 
BEGIN
SELECT 
[ID]
,[编号]
,[名字]
,[别名]
,[单位]
,(SELECT SUM(商品所属仓库信息.数量) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID AND 商品所属仓库信息.仓库信息ID = @仓库信息ID) AS 数量
,(SELECT AVG(商品所属仓库信息.单价) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID) AS 均价
,(SELECT SUM(商品所属仓库信息.数量 * 商品所属仓库信息.单价) FROM 商品所属仓库信息 WHERE 商品所属仓库信息.商品信息ID = 商品信息.ID AND 商品所属仓库信息.仓库信息ID = @仓库信息ID) AS 库存金额
FROM [商品信息] WHERE [分类] = @分类ID
END


语句简化,有没有更好的方法,查出同样的结果!

------解决方案--------------------
SELECT   a.[ID] ,a.[编号]  ,a.[名字]  ,a.[别名] ,a.[单位]         
,SUM(b.数量) AS 数量        
 ,AVG(b.单价) AS 均价         
,SUM(b.数量 * b.单价)  AS 库存金额      
FROM [商品信息] a
LEFT JOIN 商品所属仓库信息 b on a.商品信息ID=b.商品信息ID 
and b.仓库信息ID =case when @仓库信息ID = 0 then b.仓库信息ID else @仓库信息ID end
WHERE [分类] = @分类ID 
group by a.[ID] ,a.[编号]  ,a.[名字]  ,a.[别名] ,a.[单位]         
  相关解决方案