簡體   English   中英

將子查詢的結果匯總到 group by

[英]Total the results of a subquery in group by

我有一個查詢可以生成我需要的詳細數據。

現在我需要更改結果以通過dbo.Contract.Descriptiondbo.PMTask.Description生成單個總計,而不是構成總計的單個條目。

這是我所擁有的:

SELECT        dbo.Contract.Description, dbo.PMTask.Description, 
                         CAST(dbo.PMTimeActivity.TimeBillable AS decimal(10, 2)) / 60 *
                             (SELECT        SalesPrice
                               FROM            dbo.ARSalesPrice AS ARSalesPrice_1
                               WHERE        (InventoryID = dbo.InventoryItem.InventoryID) AND (dbo.PMTimeActivity.Date >= EffectiveDate) AND (dbo.PMTimeActivity.Date <= ExpirationDate) AND (dbo.InventoryItem.CompanyID = CompanyID)) AS Amount
FROM  dbo.InventoryItem
RIGHT OUTER JOIN dbo.PMTask
INNER JOIN dbo.Contract ON dbo.PMTask.CompanyID = dbo.Contract.CompanyID AND dbo.PMTask.ProjectID = dbo.Contract.ContractID
INNER JOIN dbo.PMTimeActivity ON dbo.PMTask.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.PMTask.ProjectID = dbo.PMTimeActivity.ProjectID AND dbo.PMTask.TaskID = dbo.PMTimeActivity.ProjectTaskID
ON dbo.InventoryItem.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.InventoryItem.InventoryID = dbo.PMTimeActivity.LabourItemID
WHERE (dbo.PMTimeActivity.IsCorrected = 0) AND (dbo.PMTimeActivity.IsBillable = 1) AND (dbo.PMTimeActivity.Billed = 0) AND (dbo.PMTimeActivity.DeletedDatabaseRecord <> 1)

如何更改查詢,以便在添加以下Group By實現我想要的?

Group By dbo.Contract.Description, dbo.PMTask.Description

任何建議最歡迎。

一旦您更正您的查詢以使其正常工作(缺少連接表),然后只需添加一個外部查詢,該查詢對指定的數量和組進行求和,例如

select ContractDescription, TaskDescription, sum(Amount)
from (
  SELECT dbo.[Contract].[Description] ContractDescription, dbo.PMTask.[Description] TaskDescription
    , CAST(dbo.PMTimeActivity.TimeBillable AS decimal(10, 2)) / 60 * (
      SELECT SalesPrice
      FROM dbo.ARSalesPrice AS ARSalesPrice_1
      WHERE (InventoryID = dbo.InventoryItem.InventoryID) AND (dbo.PMTimeActivity.[Date] >= EffectiveDate) AND (dbo.PMTimeActivity.[Date] <= ExpirationDate) AND (dbo.InventoryItem.CompanyID = CompanyID
    )) AS Amount
  FROM dbo.InventoryItem
  RIGHT OUTER JOIN dbo.PMTask
  INNER JOIN dbo.[Contract] ON dbo.PMTask.CompanyID = dbo.[Contract].CompanyID AND dbo.PMTask.ProjectID = dbo.[Contract].ContractID
  INNER JOIN dbo.PMTimeActivity ON dbo.PMTask.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.PMTask.ProjectID = dbo.PMTimeActivity.ProjectID AND dbo.PMTask.TaskID = dbo.PMTimeActivity.ProjectTaskID
  /* What should go here */  ON dbo.InventoryItem.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.InventoryItem.InventoryID = dbo.PMTimeActivity.LabourItemID
  WHERE (dbo.PMTimeActivity.IsCorrected = 0) AND (dbo.PMTimeActivity.IsBillable = 1) AND (dbo.PMTimeActivity.Billed = 0) AND (dbo.PMTimeActivity.DeletedDatabaseRecord <> 1)
) X
group by ContractDescription, TaskDescription;

使用空集對集進行分組將為您的分組提供總計,您可以使用立方體代替,但是它也會為您的每個分組列生成小計。

SELECT        dbo.Contract.Description, dbo.PMTask.Description, 
                         CAST(dbo.PMTimeActivity.TimeBillable AS decimal(10, 2)) / 60 *
                             (SELECT        SalesPrice
                               FROM            dbo.ARSalesPrice AS ARSalesPrice_1
                               WHERE        (InventoryID = dbo.InventoryItem.InventoryID) AND (dbo.PMTimeActivity.Date >= EffectiveDate) AND (dbo.PMTimeActivity.Date <= ExpirationDate) AND (dbo.InventoryItem.CompanyID = CompanyID)) AS Amount
FROM            dbo.InventoryItem RIGHT OUTER JOIN
                         dbo.PMTask INNER JOIN
                         dbo.Contract ON dbo.PMTask.CompanyID = dbo.Contract.CompanyID AND dbo.PMTask.ProjectID = dbo.Contract.ContractID INNER JOIN
                         dbo.PMTimeActivity ON dbo.PMTask.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.PMTask.ProjectID = dbo.PMTimeActivity.ProjectID AND dbo.PMTask.TaskID = dbo.PMTimeActivity.ProjectTaskID ON 
                         dbo.InventoryItem.CompanyID = dbo.PMTimeActivity.CompanyID AND dbo.InventoryItem.InventoryID = dbo.PMTimeActivity.LabourItemID
WHERE        (dbo.PMTimeActivity.IsCorrected = 0) AND (dbo.PMTimeActivity.IsBillable = 1) AND (dbo.PMTimeActivity.Billed = 0) AND (dbo.PMTimeActivity.DeletedDatabaseRecord <> 1)
Group By Grouping Sets (dbo.Contract.Description, dbo.PMTask.Description, ())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM