【问题标题】:SQL Group Data with a Left Join to a Sub Select左连接到子选择的 SQL 组数据
【发布时间】:2018-06-23 10:55:52
【问题描述】:

任何帮助将不胜感激。

我有一个聚合查询,我通过子查询向其中添加一列(它也有一个聚合)。但是查询没有返回正确的结果:

DECLARE @Period int 
DECLARE @Year int
SET @Period = 08
SET @Year = 2018

SELECT 
    ColA
    ,ColB
    ,PL.Month
    ,SUM(Period_Total) AS Period_Real
    ,SUM(bud.[Value]) AS Period_Estimate
    ,YTD_A.SubQuery_Estimate AS YTD_Real -- <This is the row of data with issues
FROM [dbo].[TableA] PL

LEFT JOIN [dbo].[TableB] bud
ON PL.ColA = bud.ColC AND PL.Period_Date = bud.[Period_Date]

--THIS JOIN IS WHERE I AM HAVING THE ISSUE
LEFT JOIN
(
    SELECT ColC,SUM(Value) AS SubQuery_Estimate --,month, year
    FROM [dbo].[TableB] 
    WHERE    Year =@Year AND Month BETWEEN 1 AND @Period
    GROUP BY ColC --,Month,Year
) YTD_A
ON YTD_A.ColC = PL.ColA 

WHERE PL.MONTH = @Period AND PL.Year = @Year
GROUP BY ColA,ColB,PL.MONTH, PL.Year
ORDER BY ColA,PL.Month

任何建议和帮助将不胜感激。

谢谢

【问题讨论】:

  • 更新您的问题添加适当的数据样本,实际结果和预期结果
  • 您需要在Group By 中添加YTD_A.SubQuery_Estimate 列才能执行此查询
  • 感谢两位的评论。 @Pரதீப் 为每行数据带回相同的值
  • 对于每个ColCSubQuery_Estimate 将是相同的。请添加示例数据和预期结果
  • 我正在整理表格和数据

标签: sql sql-server tsql group-by aggregation


【解决方案1】:
SELECT 
    PL.ColA, @Period as "Month",
    MIN(CASE WHEN PL."Month" =  @Period THEN bud.Period_Total END) AS Period_Real,
    MIN(CASE WHEN PL."Month" =  @Period THEN bud.Value END) AS Period_Estimate,
    SUM(CASE WHEN PL."Month" <= @Period THEN bud.Value END) AS YTD_Real
FROM dbo.TableA AS PL LEFT OUTER JOIN dbo.TableB AS bud
    ON PL.ColA = bud.ColC AND PL.Period_Date = bud.Period_Date
WHERE PL."MONTH" <= @Period AND PL."Year" = @Year
GROUP BY ColA
ORDER BY ColA;

这是一个忽略ColB 的尝试,因为我认为您可能不需要它。我已经通过一些条件聚合将其简化为单个连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    相关资源
    最近更新 更多