一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示

请教大家一个实际项目中遇到的问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
这里有两张表,一张是产量表(production),一张是计划表(MonthProductPlan)。production的内容如图所示。
一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
MonthProductPlan的内容如图所示。
一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
正如图中所示,product表中,产量数据一个小时采集一次,全矿一共使用了7台称。月计划是一个月制定一次。只要在product表中计算的月产量超过了MonthProductPlan中制定的月计划,就定义为超产。现在需要做成这样一张报表:
一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
表中的内容是每台称,每个月超产的数量。请问这样的SQL怎么写呢?
------解决思路----------------------
WITH r(ScaleID, month, realProduction)
AS (
SELECT ScaleID,
           DatePart(month,time),
           Sum(hourProduction)
      FROM production
     WHERE DatePart(year,time) = 2001
  GROUP BY ScaleID,
           DatePart(month,time)
),
p(ScaleID, month, planProduction)
AS (
SELECT ScaleID,
           DatePart(month,MonthTime),
           MonthProduction
      FROM MonthProductPlan
     WHERE DatePart(year,MonthTime) = 2001
),
o(ScaleID, month, overProduction)
AS (
SELECT p.ScaleID,
           p.month,
           CASE WHEN r.realProduction > p.planProduction
                THEN r.realProduction - p.planProduction
                ELSE NULL
           END
      FROM p
 LEFT JOIN r
        ON p.ScaleID = r.ScaleID
       AND p.month = r.month
)
SELECT month, [1号称],[2号称],[3号称],[4号称],[5号称],[6号称],[7号称]
  FROM o
 PIVOT (
        SUM(overProduction)
        FOR ScaleID IN ([1号称],[2号称],[3号称],[4号称],[5号称],[6号称],[7号称])
       ) AS pvt