2014-11-01 55 views
0

我有以下查询:如何使用聚合函数?

SELECT dbo.saleDocumentDetails.ID, 
     dbo.saleDocumentDetails.DocumentID, 
     dbo.saleDocumentDetails.invProductID, 
     dbo.saleDocumentDetails.Qty, 
     dbo.saleDocumentDetails.QtyConfirmed, 
     dbo.saleDocumentDetails.AmountPrice, 
     dbo.saleDocumentDetails.AmountUserPrice, 
     dbo.saleDocumentDetails.AmountCost, 
     dbo.saleDocumentDetails.RespiteDays, 
     dbo.saleDocumentDetails.Date_UpdateLast, 
     CASE 
      WHEN io1.Code = '33' THEN SUM(idd.Qty) 
      ELSE SUM(0) 
     END        AS Qty_BackSale, 
     CASE 
      WHEN io1.Code = '41' THEN SUM(idd.Qty) 
      ELSE SUM(0) 
     END        AS Qty_Stock 
FROM dbo.saleDocuments 
     INNER JOIN dbo.saleDocumentDetails 
      ON dbo.saleDocuments.ID = dbo.saleDocumentDetails.DocumentID 
     LEFT OUTER JOIN dbo.invDocumentDetails AS idd 
      ON dbo.saleDocumentDetails.ID = idd.saleDocumentDetailID 
     LEFT OUTER JOIN dbo.invDocuments AS id2 
      ON id2.ID = idd.invDocumentID 
     LEFT JOIN dbo.invOperations  AS io1 
      ON (io1.ID = id2.invOperationID) 
WHERE (dbo.saleDocumentDetails.ID = 1295617) 
GROUP BY 
     dbo.saleDocumentDetails.ID, 
     dbo.saleDocumentDetails.DocumentID, 
     dbo.saleDocumentDetails.invProductID, 
     dbo.saleDocumentDetails.Qty, 
     dbo.saleDocumentDetails.QtyConfirmed, 
     dbo.saleDocumentDetails.AmountPrice, 
     dbo.saleDocumentDetails.AmountUserPrice, 
     dbo.saleDocumentDetails.AmountCost, 
     dbo.saleDocumentDetails.RespiteDays, 
     dbo.saleDocumentDetails.Date_UpdateLast, 
     io1.Code 

其结果是:

enter image description here

我想实现:

enter image description here

我应该如何更改查询?

回答

1

如前所述JRLambert,移动SUM()CASE,并删除io1.CodeGROUP BY

0

您是否试图通过dbo.saleDocumentDetails.ID删除组?

+1

他需要保持这一点。 – JRLambert 2014-11-01 06:49:49

+0

是的。但除了最后两列以外,所有列都是相同的。 – breceivemail 2014-11-01 07:11:27

1

将在CASE报表SUM()CASE之外:

SELECT 
     dbo.saleDocumentDetails.ID, 
     dbo.saleDocumentDetails.DocumentID, 
     dbo.saleDocumentDetails.invProductID, 
     dbo.saleDocumentDetails.Qty, 
     dbo.saleDocumentDetails.QtyConfirmed, 
     dbo.saleDocumentDetails.AmountPrice, 
     dbo.saleDocumentDetails.AmountUserPrice, 
     dbo.saleDocumentDetails.AmountCost, 
     dbo.saleDocumentDetails.RespiteDays, 
     dbo.saleDocumentDetails.Date_UpdateLast, 
     SUM(CASE 
      WHEN io1.Code = '33' THEN idd.Qty 
      ELSE 0 
     END)        AS Qty_BackSale, 
     SUM(CASE 
      WHEN io1.Code = '41' THEN idd.Qty 
      ELSE 0 
     END)        AS Qty_Stock 
    FROM 
     dbo.saleDocuments 
     INNER JOIN dbo.saleDocumentDetails 
      ON dbo.saleDocuments.ID = dbo.saleDocumentDetails.DocumentID 
     LEFT OUTER JOIN dbo.invDocumentDetails AS idd 
      ON dbo.saleDocumentDetails.ID = idd.saleDocumentDetailID 
     LEFT OUTER JOIN dbo.invDocuments AS id2 
      ON id2.ID = idd.invDocumentID 
     LEFT JOIN dbo.invOperations  AS io1 
      ON (io1.ID = id2.invOperationID) 
WHERE 
    (dbo.saleDocumentDetails.ID = 1295617) 
GROUP BY 
    dbo.saleDocumentDetails.ID, 
    dbo.saleDocumentDetails.DocumentID, 
    dbo.saleDocumentDetails.invProductID, 
    dbo.saleDocumentDetails.Qty, 
    dbo.saleDocumentDetails.QtyConfirmed, 
    dbo.saleDocumentDetails.AmountPrice, 
    dbo.saleDocumentDetails.AmountUserPrice, 
    dbo.saleDocumentDetails.AmountCost, 
    dbo.saleDocumentDetails.RespiteDays, 
    dbo.saleDocumentDetails.Date_UpdateLast, 
    io1.Code; 
+0

谢谢,需要从组中删除'io1.Code'。 – breceivemail 2014-11-01 07:15:02