WITH
-- 生成2022-2025年月度基础表
Months AS (
SELECT
CONVERT(VARCHAR(7), DATEADD(MONTH, number, '2022-01-01'), 120) AS 年月
FROM master..spt_values
WHERE type = 'P'
AND number BETWEEN 0 AND DATEDIFF(MONTH, '2022-01-01', '2025-12-01')
),
-- 报废不良数据
Scrap AS (
SELECT
'报废不良' AS 类型,
LEFT(REPLACE(日期, '/', '-'), 7) AS 年月,
SUM(CONVERT(INT, 数量)) AS 数量
FROM [dbo].[V_报废不良]
WHERE 生产线 = '缸体'
AND 报废原因 = '加工不良'
AND [工件号码] NOT IN ('8304-8308-8311')
AND LEFT(REPLACE(日期, '/', '-'), 4) BETWEEN '2022' AND '2025'
AND 产线 = 'TNGA12'
GROUP BY LEFT(REPLACE(日期, '/', '-'), 7)
),
-- 返修不良数据
Repair AS (
SELECT
'返修不良' AS 类型,
LEFT(REPLACE(日期, '/', '-'), 7) AS 年月,
SUM(CONVERT(INT, 数量)) AS 数量
FROM [dbo].[V_返修不良]
WHERE 科室 = '第3制造科'
AND 生产线 = '缸体'
AND 不良区分 NOT IN ('9')
AND LEFT(REPLACE(日期, '/', '-'), 4) BETWEEN '2022' AND '2025'
GROUP BY LEFT(REPLACE(日期, '/', '-'), 7)
),
-- 合并不良数据
AllDefects AS (
SELECT m.年月, '报废不良' AS 类型, ISNULL(s.数量, 0) AS 数量
FROM Months m
LEFT JOIN Scrap s ON m.年月 = s.年月
UNION ALL
SELECT m.年月, '返修不良' AS 类型, ISNULL(r.数量, 0) AS 数量
FROM Months m
LEFT JOIN Repair r ON m.年月 = r.年月
),
-- 实绩数据
Production AS (
SELECT
LEFT(REPLACE(日期, '/', '-'), 7) AS 年月,
SUM(实绩) AS 实绩
FROM 现场DB.dbo.V_加工线每月生产台数
WHERE 线别 = '缸体'
AND LEFT(REPLACE(日期, '/', '-'), 4) BETWEEN '2022' AND '2025'
GROUP BY LEFT(REPLACE(日期, '/', '-'), 7)
),
-- 主结果集
MainData AS (
SELECT
ad.类型,
ad.年月,
ad.数量,
ISNULL(p.实绩, 0) AS 实绩,
CASE WHEN ISNULL(p.实绩, 0) > 0
THEN ROUND((CAST(ad.数量 AS FLOAT) / CAST(p.实绩 AS FLOAT)) * 100, 4)
ELSE 0
END AS 不良率,
'0.01' AS 目标
FROM AllDefects ad
LEFT JOIN Production p ON ad.年月 = p.年月
),
-- 计算2022-2024年度平均值
YearlyAvg AS (
SELECT
类型,
'2022-2024平均' AS 年月,
AVG(数量) AS 数量,
AVG(实绩) AS 实绩,
CASE WHEN AVG(实绩) > 0
THEN ROUND((SUM(数量) * 1.0 / SUM(实绩)) * 100, 4)
ELSE 0
END AS 不良率,
'0.01' AS 目标
FROM MainData
WHERE 年月 BETWEEN '2022-01' AND '2024-12'
GROUP BY 类型
)
-- 合并最终结果
SELECT * FROM MainData WHERE 年月 LIKE '2025-%'
UNION ALL
SELECT * FROM YearlyAvg
ORDER BY 年月;
生成:2022年度2023年度2024年度3个平均年度数据
最新发布