请各位高人帮忙分析下原因为什么SUM的结果不一样 
SELECT 
t1.ProductId,
t1.[Name] AS spName,
t1.MeasurementUnit,--单位
t1.sku,--商品编号
sum(t3.Quantity)as quantity
FROM dbo.Product t1, dbo.Inventory_BillSheet t2 ,
dbo.Inventory_BillSheet_Item t3 
WHERE t1.ProductId=t3.ProductId 
AND t2.BillSheetId=t3.BillSheetId and t2.billtype=2 and t2.orderstatusid=7
AND t3.productid=8010
GROUP BY t1.ProductId,t1.[Name],t1.MeasurementUnit,t1.sku
编号         名称          单位     数量
8010 学生剪刀   把 8SELECT 
ProductId,spmc,MeasurementUnit,sku,
 sum(cksl) as quantityFROM
(SELECT  t1.ProductId,t1.[Name] AS spmc,t1.sku,t1.MeasurementUnit,
(SELECT 
sum(rt3.Quantity) FROM  Product rt1, Inventory_BillSheet rt2 ,Inventory_BillSheet_Item rt3 
WHERE 
 rt1.ProductId=rt3.ProductId 
AND rt3.ProductId =t1.productid
AND rt2.BillSheetId=t3.BillSheetId 
AND rt2.BillSheetId=rt3.BillSheetId 
and t1.productid=8010
AND rt2.BillType=2
AND t2.BillType=rt2.BillType 
AND rt2.OrderStatusId=7
) AS cksl
FROM  Product t1, Inventory_BillSheet t2 ,Inventory_BillSheet_Item t3 ,Inventory_Consignor t4 WHERE t1.ProductId=t3.ProductId AND t2.BillSheetId=t3.BillSheetId 
AND t2.ConsignorId=t4.ConsignorId
 )as  TABL GROUP BY ProductId,sku,spmc,MeasurementUnit
编号         名称          单位     数量
8010 学生剪刀   把 10

解决方案 »

  1.   

    SELECT  ProductId ,
            spmc ,
            MeasurementUnit ,
            sku ,
            SUM(cksl) AS quantity
    FROM    ( SELECT    t1.ProductId ,
                        t1.[Name] AS spmc ,
                        t1.sku ,
                        t1.MeasurementUnit ,
                        ( SELECT    SUM(rt3.Quantity)
                          FROM      Product rt1 ,
                                    Inventory_BillSheet rt2 ,
                                    Inventory_BillSheet_Item rt3
                          WHERE     rt1.ProductId = rt3.ProductId
                                    AND rt3.ProductId = t1.productid
                                    AND rt2.BillSheetId = t3.BillSheetId
                                    AND rt2.BillSheetId = rt3.BillSheetId
                                    AND t1.productid = 8010
                                    AND rt2.BillType = 2
                                    AND t2.BillType = rt2.BillType
                                    AND rt2.OrderStatusId = 7
                        ) AS cksl
              FROM      Product t1 ,
                        Inventory_BillSheet t2 ,
                        Inventory_BillSheet_Item t3 ,
                        Inventory_Consignor t4
              WHERE     t1.ProductId = t3.ProductId
                        AND t2.BillSheetId = t3.BillSheetId
                        AND t2.ConsignorId = t4.ConsignorId
            ) AS TABL
    GROUP BY ProductId ,
            sku ,
            spmc ,
            MeasurementUnit
      

  2.   

    lz的第一种写法,如果可能最好写成 inner join 或者left join 这种形式。
    能够把链接相关明确一下。