读书人

话语简化

发布时间: 2013-07-16 22:38:05 作者: rapoo

语句简化


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

读书人网 >SQL Server

热点推荐