一个实际项目中遇到的有关问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
请教大家一个实际项目中遇到的问题,是关于两张表之间的数据比较,并将比较结果以报表形式显示
这里有两张表,一张是产量表(production),一张是计划表(MonthProductPlan)。production的内容如图所示。


MonthProductPlan的内容如图所示。

正如图中所示,product表中,产量数据一个小时采集一次,全矿一共使用了7台称。月计划是一个月制定一次。只要在product表中计算的月产量超过了MonthProductPlan中制定的月计划,就定义为超产。现在需要做成这样一张报表:

表中的内容是每台称,每个月超产的数量。请问这样的SQL怎么写呢?
------解决思路----------------------
这里有两张表,一张是产量表(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