as

本文介绍了在IT领域内转载文章时需要遵循的相关规范和要求,强调了指出来源的重要性,并提醒作者和读者注意保护知识产权。
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/623537/viewspace-1004789/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/623537/viewspace-1004789/

-- 公用日期表CTE(2025年各月份) WITH dom AS ( SELECT CONVERT(VARCHAR(6), DATEADD(MONTH, number, '2022-01-01'), 112) AS DateOfMonth FROM master..spt_values WHERE type = 'P' AND CONVERT(VARCHAR(6), DATEADD(MONTH, number, '2022-01-01'), 112) LIKE '2025%' ) -- 缸体产线数据 SELECT '缸体' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( -- 缸体产线原始SQL(保持内容不变) SELECT '1' rn, '22年' AS 年月, '高压铸造' 不良类型, 83 不良数, 23564 产量, 0.10 不良率 UNION ALL SELECT '1', '23年', '高压铸造', 113, 31025, 0.16 UNION ALL SELECT '1', '24年', '高压铸造', 113, 31025, 0.141 UNION ALL SELECT '2', '01', '高压铸造', 10, 0, 0.015 UNION ALL SELECT '2', '04', '高压铸造', 25, 0, 0.02 UNION ALL SELECT '3', '平均', '高压铸造', 1, 31025, 0.0153 UNION ALL SELECT '2', RIGHT(dom.DateOfMonth, 2), td.不良类型, td.不良数, td.产量, CONVERT(DECIMAL(12,3), td.不良率*100) FROM dom LEFT JOIN ( SELECT '2' rn, '高压铸造' AS 不良类型, 年+月 AS 年月, CONVERT(DECIMAL(12,0), 合格数) AS 产量, CONVERT(DECIMAL(12,0), 不良数) AS 不良数, CASE WHEN 合格数 = 0 THEN 0 ELSE CONVERT(DECIMAL(12,7), 不良数/合格数) END AS 不良率 FROM ( SELECT duty, 年, 月, SUM(合格数) 合格数, SUM(不良数) 不良数 FROM [192.168.10.116].GLKANBAN.dbo.V_铸造日报_C WHERE duty = '高压铸造' AND 年 = '2025' GROUP BY duty, 年, 月 ) A UNION ALL SELECT '2', '返修品', t1.年月, t1.合格数 + t1.不良数 + 数量, 数量, CONVERT(DECIMAL(12,7), 数量/(合格数)) FROM ( SELECT 年+月 AS 年月, SUM(合格数) 合格数, SUM(不良数) AS 不良数 FROM [192.168.10.116].GLKANBAN.dbo.V_铸造日报_C WHERE duty = '高压铸造' AND 年 = '2025' GROUP BY 年, 月 ) t1 LEFT JOIN ( SELECT LEFT(REPLACE(日期, '/', ''),6) AS 年月, ISNULL(SUM(数量), 1) AS 数量 FROM [192.168.10.116].GLKANBAN.dbo.T_铸造_缸体缸盖返修记录表 WHERE 类型 = '缸体毛坯' AND LEFT(日期, 4) = '2025' GROUP BY LEFT(REPLACE(日期, '/', ''),6) ) t2 ON t1.年月 = t2.年月 WHERE t2.数量 IS NOT NULL ) td ON dom.DateOfMonth = td.年月 UNION ALL SELECT '2', '平均', '高压铸造', CONVERT(DECIMAL(12,0), 不良数)/5, CONVERT(DECIMAL(12,0), 合格数), CASE WHEN 合格数 = 0 THEN 0 ELSE CONVERT(DECIMAL(12,7), 不良数/合格数)*100 END FROM dom LEFT JOIN ( SELECT '2' rn, '缸体报废' AS 不良类型, REPLACE(年月, '/', '') AS 年月, SUM(成品) AS 产量, SUM(不良数) AS 不良数, CASE WHEN SUM(成品) = 0 THEN 0 ELSE SUM(不良数)/SUM(成品) END AS 不良率 FROM ( SELECT LEFT(生产日期, 7) AS 年月, SUM(CONVERT(DECIMAL(4,0), 完成品)) AS 成品, SUM(CONVERT(DECIMAL(3,0), 不良数)) AS 不良数 FROM [192.168.10.116].GLKANBAN.[dbo].[V_铸造日报_M] WHERE 生产日期 > '2023/12/31' AND 产线 = '缸体线' GROUP BY LEFT(生产日期, 7) ) A GROUP BY 年月 UNION ALL SELECT '2', '返修品', t1.年月, t1.台数, t2.数量, CONVERT(DECIMAL(12,7), t2.数量/(t1.台数 + t2.数量)) FROM ( SELECT REPLACE(年月, '/', '') AS 年月, SUM(成品) AS 台数 FROM ( SELECT LEFT(生产日期, 7) AS 年月, SUM(CONVERT(DECIMAL(4,0), 完成品)) AS 成品 FROM [192.168.10.116].GLKANBAN.[dbo].[V_铸造日报_M] WHERE LEFT(生产日期, 4) = '2025' AND 产线 = '缸体线' GROUP BY LEFT(生产日期, 7) ) B GROUP BY 年月 ) t1 LEFT JOIN ( SELECT LEFT(REPLACE(日期, '/', ''),6) AS 年月, ISNULL(COUNT(*), 0) AS 数量 FROM [192.168.10.116].[GLKANBAN].[dbo].[T_铸造_缸体缸盖返修记录表] WHERE 类型 = '缸体' AND LEFT(日期, 4) = '2025' GROUP BY LEFT(REPLACE(日期, '/', ''),6) ) t2 ON t1.年月 = t2.年月 WHERE t2.数量 IS NOT NULL ) td ON dom.DateOfMonth = td.年月 UNION ALL ) AS 缸体数据 UNION ALL -- 关键合并点 -- 缸盖产线数据 SELECT '缸盖' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( SELECT '1' rn, '22年' AS 年月, '低压铸造' AS 不良类型, 400 AS 不良数, 43782 AS 产量, 1.11 AS 不良率 UNION ALL SELECT '1' rn, '22年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '低压铸造' AS 不良类型, 209 AS 不良数, 68233 AS 产量, 0.63 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '低压铸造' AS 不良类型, 209 AS 不良数, 68233 AS 产量, 0.613 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '返修品' AS 不良类型, 121 AS 不良数, 609591 AS 产量, 0.23 AS 不良率 UNION ALL SELECT '2' rn, '01' AS 年月, '低压铸造' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0.02 AS 不良率 UNION ALL SELECT '2' rn, '03' AS 年月, '低压铸造' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0.03 AS 不良率 UNION ALL SELECT '2' rn, '04' AS 年月, '低压铸造' AS 不良类型, 1 AS 不良数, 1 AS 产量, -0.02 AS 不良率 UNION ALL SELECT '2' rn, '07' AS 年月, '低压铸造' AS 不良类型, 1 AS 不良数, 1 AS 产量, -0.063 AS 不良率 UNION ALL SELECT '2' rn, '09' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '10' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '3' rn, '平均' AS 年月, '低压铸造' AS 不良类型, 0 AS 不良数, 68233 AS 产量, 0.026 AS 不良率 UNION ALL SELECT '3' rn, '平均' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 1 AS 产量, 0.03 AS 不良率 UNION ALL SELECT '2' rn, RIGHT(dom.DateOfMonth, 2) AS 年月, 不良类型, 不良数, 产量, CONVERT(DECIMAL(12, 3), 不良率 * 100) AS 不良率 FROM dom LEFT JOIN ( SELECT '2' rn, 产品 AS 不良类型, CONCAT(年, 月) AS 年月, CONVERT(DECIMAL(12, 0), 合格数) AS 产量, CONVERT(DECIMAL(12, 0), 不良数) AS 不良数, CASE WHEN 合格数 = 0 THEN 0 ELSE CONVERT(DECIMAL(12, 7), 不良数 / 合格数) END AS 不良率 FROM ( SELECT duty AS 产品, 年, 月, SUM(合格数) AS 合格数, SUM(不良数) AS 不良数 FROM [192.168.10.116].GLKANBAN.dbo.V_铸造日报_C WHERE duty = '低压铸造' GROUP BY duty, 年, 月 ) A WHERE 年 = '2025' UNION ALL SELECT '2' rn, 类型 AS 不良类型, t1.年月, 合格数, 数量, CONVERT(DECIMAL(12, 7), 数量 / 合格数) AS 不良率 FROM ( SELECT CONCAT(年, 月) AS 年月, SUM(合格数) AS 合格数, SUM(不良数) AS 不良数 FROM [192.168.10.116].GLKANBAN.dbo.V_铸造日报_C WHERE duty = '低压铸造' GROUP BY duty, 年, 月 ) t1 LEFT JOIN ( SELECT LEFT(REPLACE(日期, '/', ''), 6) AS 年月, ISNULL(SUM(数量), 1) AS 数量, '返修品' AS 类型 FROM [192.168.10.116].GLKANBAN.dbo.T_铸造_缸体缸盖返修记录表 WHERE 类型 = '缸盖毛坯' AND LEFT(日期, 4) = '2025' GROUP BY LEFT(REPLACE(日期, '/', ''), 6) ) t2 ON t1.年月 = t2.年月 WHERE 类型 IS NOT NULL ) td ON dom.DateOfMonth = td.年月 UNION ALL SELECT '2' rn, 月 AS 年月, 产品 AS 不良类型, CONVERT(DECIMAL(12, 0), 不良数) / 7.3 AS 平均不良数, CONVERT(DECIMAL(12, 0), 合格数) AS 合格数, CASE WHEN 合格数 = 0 THEN 0 ELSE CONVERT(DECIMAL(12, 7), 不良数 / 合格数) * 100 END AS 平均不良率 FROM ( SELECT duty AS 产品, 年, '平均' AS 月, SUM(合格数) AS 合格数, SUM(不良数) AS 不良数 FROM [192.168.10.116].GLKANBAN.dbo.V_铸造日报_C WHERE duty = '低压铸造' GROUP BY duty, 年 ) A WHERE 年 = '2025' ) AS low_pressure UNION ALL SELECT '缸盖' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( SELECT '1' rn, '22年' AS 年月, '低压铸造' AS 不良类型, 400 AS 不良数, 43782 AS 产量, 1.11 AS 不良率 UNION ALL -- 缸盖产线数据 (原缸盖线) SELECT '缸盖' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( SELECT '1' rn, '22年' AS 年月, '缸盖报废' AS 不良类型, 357 AS 不良数, 43782 AS 产量, 0.65 AS 不良率 UNION ALL SELECT '1' rn, '22年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '缸盖报废' AS 不良类型, 160 AS 不良数, 68233 AS 产量, 0.29 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '缸盖报废' AS 不良类型, 160 AS 不良数, 68233 AS 产量, 0.308 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '返修品' AS 不良类型, 94 AS 不良数, 564760 AS 产量, 0.214 AS 不良率 UNION ALL SELECT '2' rn, '01' AS 年月, '缸盖报废' AS 不良类型, 1 AS 不良数, 0 AS 产量, 0.015 AS 不良率 UNION ALL SELECT '2' rn, '04' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 0.03 AS 不良率 UNION ALL SELECT '2' rn, '07' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 0.05 AS 不良率 UNION ALL SELECT '2' rn, '08' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 1.0 AS 不良率 UNION ALL SELECT '2' rn, '02' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '04' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '08' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '09' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '10' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '3' rn, '平均' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 1 AS 产量, 0.001 AS 不良率 UNION ALL SELECT '2' rn, RIGHT(dom.DateOfMonth, 2) AS 年月, 不良类型, 不良数, 产量, CONVERT(DECIMAL(12, 3), 不良率 * 100) AS 不良率 FROM dom LEFT JOIN ( SELECT '2' AS rn, '缸盖报废' AS 不良类型, REPLACE(年月, '/', '') AS 年月, SUM(成品) AS 产量, SUM(不良数) AS 不良数, CASE WHEN SUM(成品) = 0 THEN 0 ELSE SUM(不良数) / SUM(成品) END AS 不良率 FROM ( SELECT CASE WHEN 机型 LIKE '%2.0%' THEN 'TNGA2.0L' WHEN 机型 LIKE '%1.5%' THEN 'TNGA1.5L' ELSE 'TNGA2.5L' END AS LINE, LEFT(生产日期, 7) AS 年月, SUM(CONVERT(DECIMAL(4, 0), 完成品)) AS 成品, SUM(CONVERT(DECIMAL(3, 0), 不良数)) AS 不良数 FROM [192.168.10.116].GLKANBAN.[dbo].[V_铸造日报_M] WHERE 生产日期 > '2023-12-31' AND 产线 = '缸盖线' GROUP BY LEFT(生产日期, 7), 机型 ) A GROUP BY 年月 -- 此处保持所有缸盖产线原始UNION ALL语句... SELECT '2' rn, RIGHT(dom.DateOfMonth, 2) AS 年月, 不良类型, 不良数, 产量, CONVERT(DECIMAL(12, 3), 不良率 * 100) AS 不良率 FROM dom LEFT JOIN (...) td ON dom.DateOfMonth = td.年月 ) AS low_pressure UNION ALL SELECT '缸盖' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( SELECT '1' rn, '22年' AS 年月, '缸盖报废' AS 不良类型, 357 AS 不良数, 43782 AS 产量, 0.65 AS 不良率 UNION ALL -- 缸盖产线数据 (原缸盖线) SELECT '缸盖' AS 产线, rn, 年月, 不良类型, 不良数, 产量, 不良率 FROM ( SELECT '1' rn, '22年' AS 年月, '缸盖报废' AS 不良类型, 357 AS 不良数, 43782 AS 产量, 0.65 AS 不良率 UNION ALL SELECT '1' rn, '22年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '缸盖报废' AS 不良类型, 160 AS 不良数, 68233 AS 产量, 0.29 AS 不良率 UNION ALL SELECT '1' rn, '23年' AS 年月, '返修品' AS 不良类型, 1 AS 不良数, 1 AS 产量, 0 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '缸盖报废' AS 不良类型, 160 AS 不良数, 68233 AS 产量, 0.308 AS 不良率 UNION ALL SELECT '1' rn, '24年' AS 年月, '返修品' AS 不良类型, 94 AS 不良数, 564760 AS 产量, 0.214 AS 不良率 UNION ALL SELECT '2' rn, '01' AS 年月, '缸盖报废' AS 不良类型, 1 AS 不良数, 0 AS 产量, 0.015 AS 不良率 UNION ALL SELECT '2' rn, '04' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 0.03 AS 不良率 UNION ALL SELECT '2' rn, '07' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 0.05 AS 不良率 UNION ALL SELECT '2' rn, '08' AS 年月, '缸盖报废' AS 不良类型, 45 AS 不良数, 0 AS 产量, 1.0 AS 不良率 UNION ALL SELECT '2' rn, '02' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '04' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '08' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '09' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '2' rn, '10' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 0 AS 产量, 0 AS 不良率 UNION ALL SELECT '3' rn, '平均' AS 年月, '返修品' AS 不良类型, 0 AS 不良数, 1 AS 产量, 0.001 AS 不良率 UNION ALL SELECT '2' rn, RIGHT(dom.DateOfMonth, 2) AS 年月, 不良类型, 不良数, 产量, CONVERT(DECIMAL(12, 3), 不良率 * 100) AS 不良率 FROM dom LEFT JOIN ( SELECT '2' AS rn, '缸盖报废' AS 不良类型, REPLACE(年月, '/', '') AS 年月, SUM(成品) AS 产量, SUM(不良数) AS 不良数, CASE WHEN SUM(成品) = 0 THEN 0 ELSE SUM(不良数) / SUM(成品) END AS 不良率 FROM ( SELECT CASE WHEN 机型 LIKE '%2.0%' THEN 'TNGA2.0L' WHEN 机型 LIKE '%1.5%' THEN 'TNGA1.5L' ELSE 'TNGA2.5L' END AS LINE, LEFT(生产日期, 7) AS 年月, SUM(CONVERT(DECIMAL(4, 0), 完成品)) AS 成品, SUM(CONVERT(DECIMAL(3, 0), 不良数)) AS 不良数 FROM [192.168.10.116].GLKANBAN.[dbo].[V_铸造日报_M] WHERE 生产日期 > '2023-12-31' AND 产线 = '缸盖线' GROUP BY LEFT(生产日期, 7), 机型 ) A GROUP BY 年月 SELECT '2' rn, RIGHT(dom.DateOfMonth, 2) AS 年月, 不良类型, 不良数, 产量, CONVERT(DECIMAL(12, 3), 不良率 * 100) AS 不良率 FROM dom LEFT JOIN (...) td ON dom.DateOfMonth = td.年月 ) AS head_line ) AS 缸盖数据 -- 最终排序 ORDER BY 产线, rn, 年月;
12-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值