日期:2014-05-17  浏览次数:20626 次

语句简化

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.[单位]